1、宣告指標
typename * pointername;
型別 * 指標名
示例:
double * pn; //指向double型別的指標
int * pc; //指向int型別的指標
2、給指標賦值
將記憶體位址賦給指標
(1)用&運算子獲得被命名的記憶體的位址
指標名 = & 變數名
(2)用new運算子返回未命名的記憶體的位址
指標名 = new 型別 [陣列]
int * pt;
int pc = 3;
//cout << "pt = "<< pt << "\n"; //報錯,未賦值的指標無法獲取位址
cout << "&pt = "<< &pt << "\n"; //獲取指標名的記憶體位址
cout << "&pc = "<< &pc << "\n"; //獲取變數名的記憶體位址
pt = &pc; //將變數名的記憶體位址賦給指標
cout << "* pt = " << *pt << "\n"; //對指標名解除引用,即獲得指標指向變數名的記憶體位址的值
cout << "pt = "<< pt << "\n"; //獲取指標名指向的變數名的記憶體位址
cout << "&pt = "<< &pt << "\n\n"; //獲取指標名的記憶體位址
3、對指標解除引用,即獲得指標指向的變數名的記憶體位址的值
(1)用間接運算子*來解除引用
* 指標名
(2)陣列表示法
指標名[數字]
4、區分指標和指標所指向的值
例子(1)指標
int * pt = new int;
(2)指標指向的值,即接觸引用
*pt = 5
5、陣列名
(1)多數情況下,c++將陣列名視為陣列的第乙個元素的位址,即
int tacos[10];
那麼,tacos等同於&tacos[1]
(2)但是例外情況的是,sizeof運算子用於陣列名時,就會返回整個陣列的長度(單位為位元組)
6、指標算術
(1)c++允許指標和整數相加,加1的結果等於原來的位址值加上指向的物件所占用的總位元組數。
int tacos[10] = ;
int * pa = tacos;
cout << "pa = " << pa << " &pa = " << *pa << "\n"; //pa為陣列第乙個
pa = pa + 1;
cout << "pa + 1 = " << pa << " &pa = " << *pa << "\n";
(2)將乙個指標減去另乙個指標,獲得兩個指標的差
int tacos[10] = ;
int * pa = tacos;
cout << "pa = " << pa << " &pa = " << *pa << "\n"; //pa為陣列第乙個
pa = pa + 1;
cout << "pa + 1 = " << pa << " &pa = " << *pa << "\n";
int * pe = &tacos[9];
pe = pe - 1;
int diff = pe - pa;
cout << "diff = " << diff << "\n";
7、陣列的動態聯編和靜態聯編
(1)靜態聯編,即陣列的長度在編譯時設定
int tacos[10];
(2)動態聯編,使用new運算子建立陣列,其長度也將在執行時設定,使用完後應使用delete釋放占用的記憶體int size;
cin >> size;
int * pz = new int [size];
...delete pz;
8、陣列表示法和指標表示法來解除引用
(1)使用方括號陣列表示法等同於對指標解除引用
(2)指標表示法,即*(pointername + number)
c 指標小結
宣告指向特定型別的指標,使用以下格式 typename pointername 示例 double pn 宣告乙個double型別的指標 char pc 宣告乙個char型別的指標應將記憶體位址賦值給指標,對變數名應用 運算子,來獲得變數位址,或使用new運算子返回未命名的記憶體位址。示例 doub...
C 指標學習筆記
例 int變數 updates 指標變數 p updates updates表示值,updates表示位址 p updates表示位址,p updates表示指標所指向的值。所以 updates p updates,updates p updates 指標的初始化 int p updates 表明 ...
C 學習筆記 this指標
先從c語言結構體初始化的例子來說明this指標。定義乙個結構體,並對其實例進行初始化。include includeusing namespace std struct student void initstudent name,name st age age strcpy st main 在ini...