1、引言
筆者認為對于學習指針要弄清楚如下問題基本可以應付大部分的場景:
① 指針是什么?
② 指針的類型是什么?
③ 指針指向的類型是什么?
④ 指針指向了哪里?
2、如何使用指針
使用時的步驟如下:
① 聲明指針變量;
② 初始化;
③ 訪問指針指向的數據。
基于這個三個步驟,筆者將對整型數值類型的數據進行舉例說明。
//-----------------聲明指針變量int* prt_a = nullptr;//聲明一個整型數指針變量,nullptr—空指針//-------------初始化指針變量,采用指向已有變量的方式-----int a = 10; //定義整型數值常量prt_a = &a;//指針指向了變量a的地址&a//---------訪問指針數據int my_test = 0;my_test = *prt_a;cout << "a = " << a << endl;cout << "my_test = " << my_test << endl;cout << "*prt_a = " << *prt_a << endl;//----------訪問并修改指針指向的數據*prt_a = 20;cout << "a = " << a << endl;cout << "*prt_a = " << *prt_a << endl;
運行結果如下:
代碼解讀:
① 聲明一個整型數變量a,它的值為10,它的地址是&a,它在計算機上的執行原理是:在物理上,內存地址為&a的內存處,存放了 (int)10的編碼,通過對該內存處的編碼解碼就可以得到(int)10;
② 聲明一個指針變量prt_a,它指向了變量a的地址;
③ 通過解引用*prt_a,就可以獲取指針變量指向的數據,也就是a的值,int(10);
④ 將指針變量指向的數據賦值給整型變量my_test ;
⑤ 將指針變量指向的數據修改為20,實際上也就是將整型變量a的值修改為20。
3、總結:
以上述案例來回答引言中的幾個問題:
① 指針變量prt_a就是a的地址,也就是變量a存放在物理內存上的位置,把內存比作電影院的座位,指針變量就是座位的序號;
② 指針prt_a 的指針類型是int*,所以它指向的數據類型也必須是int;
③ 指針prt_a指向的數據類型是int;
④ 指針prt_a指向的是變量a的地址。
4、注意事項
① 兩個指針不能進行加法運算,這是非法操作,因為進行加法后,得到的結果指向一個不知所向的地方,而且毫無意義
② 指針的值是XX,相當于說該指針指向以XX為首地址的一片區域,這片區域的大小由指針指向的類型決定;
③ &是取地址運算符,*p 的結果是p 所指向的東西。