C 學習筆記 指標小結

2021-07-29 18:30:43 字數 2188 閱讀 3149

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...