c++中的指針最全總結(jié)
一、指針的基本概念
指針的作用:可以通過指針間接訪問內(nèi)存
- 內(nèi)存編號是從0開始記錄的,一般采用16進(jìn)制數(shù)字表示。
- 可以利用指針變量保存地址。
二、指針變量的定義和使用
指針變量定義語法: 數(shù)據(jù)類型 * 變量名
#include<iostream> using namespace std; int main() { //1.定義一個指針 int a = 10; //指針定義的語法: 數(shù)據(jù)類型 * 指針變量名 ; int* p; //讓指針記錄變量a的地址 p = &a; cout << "a的地址是:" << &a << endl; cout << "指針p指向的地址是:" << p << endl; //2.如何使用指針 //可以通過解引用的方式來找到指針指向的內(nèi)存 //指針恰加 * 代表解引用,找到指針指向的內(nèi)存中的數(shù)據(jù) *p = 1000;//將指針指向的內(nèi)存中的數(shù)據(jù)修改為1000 cout << "a的值是:" << a << endl; cout << "指針p指向的地址中的值是:" << *p << endl; system("pause"); return 0; }
三、指針?biāo)嫉膬?nèi)存空間
提問:指針也是種數(shù)據(jù)類型,那么這種數(shù)據(jù)類型占用多少內(nèi)存空間?
#include<iostream> using namespace std; int main() { // 指針?biāo)嫉膬?nèi)存空間 int a = 10; //int* p; //p = &a; int* p = &a; //在32位操作系統(tǒng)下,指針是占用4個字節(jié)空間大小,不管是什么數(shù)據(jù)類型 //在64位操作系統(tǒng)下,指針是占用8個字節(jié)空間大小,不管是什么數(shù)據(jù)類型 cout<<"sizeof(int *)="<<sizeof(p)<<endl; cout << "sizeof(int *)=" << sizeof(int *) << endl; cout << "sizeof(int *)=" << sizeof(float *) << endl; cout << "sizeof(int *)=" << sizeof(double *) << endl; cout << "sizeof(int *)=" << sizeof(char *) << endl; system("pause"); return 0; }
四、空指針和野指針
空指針:指針變量指向內(nèi)存編號為0的空間
用途:初始化指針變量
注意:空指針指向的內(nèi)存是不可以訪問的
4.1 空指針
#include<iostream> using namespace std; int main() { //空指針 //1.空指針用于給指針變量進(jìn)行初始化 int* p = NULL; //2.空指針是不能進(jìn)行訪問的 //0~255之間的內(nèi)存編號是系統(tǒng)占用的,因此不可以訪問 *p=100; //error: dereferencing pointer to incomplete type 'int' system("pause"); return 0; }
4.2 野指針
野指針:指針變量指向非法的內(nèi)存空間
注意:空指針野指針都不是我們申請的空間,因此不需要訪問。
#include<iostream> using namespace std; int main() { //野指針 //在程序中,盡量避免出現(xiàn)野指針 int *p =(int*)0x1100; cout<<*p<<endl; //輸出地址為0x1100處的值,此處為0,所以會出現(xiàn)野指針錯誤 system("pause"); return 0; }
五、const修飾指針
const修飾指針有三種情況:
- const修飾指針 ----常量指針
- const修飾常量 ---指針常量
- const即修飾指針,又修飾常量
#include <iostream> using namespace std; int main() { //1.const修飾指針 int a = 10; int b = 10; const int* p = &a; //指向常量的指針 //*p = 20; //錯誤,不能修改常量指針指向的值 p = &b; //正確,可以修改指針指向的值 //2.const修飾常量 int * const p2 = &a; //指針指向常量,不能修改指針指向的方向,指針指向的值可以改 *p2 = 20; //正確,可以修改指針指向的值 //p2 = &b; //錯誤,不能修改指針指向的方向 //3.const修飾指針和常量 //指針指向和指針指向的值都不能修改,只能讀取 const int * const p3=&a; //*p3 = 20; //錯誤,不能修改指針指向的值 //p3 = &b; //錯誤,不能修改指針指向的方向 system("pause"); return 0; }
六、指針和數(shù)組
作用:利用指針訪問數(shù)組中元素
#include <iostream> using namespace std; int main() { //指針和數(shù)組 //利用指針訪問數(shù)組中的元素 int arr[10]= {1,2,3,4,5,6,7,8,9,10}; cout<<"數(shù)組中的第一個元素:"<<arr[0]<<endl; int* p = arr;//arr就是數(shù)組的首地址 cout<<"數(shù)組中的第一個元素的地址:"<<*p<<endl; p++;//指向數(shù)組的第二個元素 cout<<"數(shù)組中的第二個元素的地址:"<<*p<<endl; p--;//指向數(shù)組的第一個元素 cout << "利用指針遍歷數(shù)組" << endl; for (int i = 0; i < 10; i++) { cout << *(p + i) << " "; } cout << endl; system("pause"); return 0; }
七、指針和函數(shù)
作用:利用指針做函數(shù)參數(shù),可以修改實參的值
#include<iostream> using namespace std; //實現(xiàn)兩個數(shù)字進(jìn)行交換 void swap01(int a, int b) { int temp = a; a = b; b = temp; cout << "a=" << a << " b=" << b << endl; } void swap02(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int main() { //指針和函數(shù) //1.值傳遞 int a = 10; int b = 20; swap01(a, b); cout << "a=" << a << " b=" << b << endl; //輸出結(jié)果為 a=20 b=10 //2.地址傳遞 //實參的值會發(fā)生改變 swap02(&a, &b); cout << "a=" << a << " b=" << b << endl; //輸出結(jié)果為 a=20 b=10 system("pause"); return 0; }
八、指針、數(shù)組、函數(shù)(案例)
#include<iostream> using namespace std; //冒泡排序函數(shù) void bubbleSort(int* arr, int len) { { for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } } int main() { //1.先常見一個數(shù)組 int arr[10] = { 4,3,6,9,1,2,10,8,7,5 }; //2.創(chuàng)建函數(shù),實現(xiàn)冒泡排序 int len = sizeof(arr) / sizeof(arr[0]); //3.調(diào)用函數(shù),對數(shù)組進(jìn)行排序 bubbleSort(arr, len); cout << "排序后的數(shù)組為:"; for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; system("pause"); return 0; }
總結(jié)
到此這篇關(guān)于c++中指針的文章就介紹到這了,更多相關(guān)c++中指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)
這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08ON_COMMAND_RANGE多個按鈕響應(yīng)一個函數(shù)的解決方法
這篇文章主要介紹了ON_COMMAND_RANGE多個按鈕響應(yīng)一個函數(shù)的解決方法,需要的朋友可以參考下2014-07-07淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別
這篇文章主要介紹了淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04C++類的自動轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實現(xiàn)示例
類的自動轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換是面向?qū)ο缶幊讨刑幚眍愋椭g轉(zhuǎn)換的兩種重要機(jī)制,本文就來介紹一下這兩種方法的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-07-07