C語言指標,什麼是二級指標?整理、歸納、總結 linux C第38講

二級指標

指標變數就是一個變數,指標變數有自己的儲存空間。指標變數的空間容量是多少?我們可以使用sizeof關鍵字獲取指標變數的容量,程式測試例子如下:

C語言指標,什麼是二級指標?整理、歸納、總結 linux C第38講

程式執行結果如下:

C語言指標,什麼是二級指標?整理、歸納、總結 linux C第38講

可以看到,char*、int*、double*型別的指標變數,都是存放一個變數的地址。所以,指標變數的記憶體空間都是一樣,都是佔用4個位元組。

那麼,可以把一個變數的地址,賦給指標變數。例如:

char

a;

char

* pa = &a;

//指標變數pa指向變數a;

此時,pa作為char*型別的指標變數,存放變數a的地址。那麼,pa是指標變數,也是一個變數,也有自己的儲存空間和記憶體地址。那麼,指標變數pa的地址可以賦給怎麼樣型別的變數?

此時,我們就引出了二級指標,它的定義如下:

資料型別** 變數名;

就是在資料型別後面,接上兩個指標取值運算子“**”,那麼,就把變數定義為二級指標。那麼,定義指標變數的時候,有N個指標取值運算子,就稱為N級指標。例如:

資料型別* 變數名;

此時,定義的就是一級指標變數。可以總結:

(1) 一級指標變數可以存放普通變數的地址;一級指標變數就指向普通變數;

(2) 對一級指標變數使用

指標取值運算子*

,是對一級指標變數降級,轉換為它所指向的變數;

(3) 二級指標變數就是可以存放一級指標變數的地址;二級指標變數就指向一級指標變數;

(4) 對二級指標變數使用

指標取值運算子*

,是對二級指標變數降級,轉換為它所指向的變數;就是轉換為一級指標變數;

(5) 對二級指標變數可以連續使用兩個

指標取值運算子

*,進行兩次降級,轉換為一級指標變數所指向的變數;

下面舉例進行分析:

char

a;

char

* pa = &a;

//指標變數pa指向變數a;

char

** pb;

//定義二級指標變數;

pb = &pa;

//把一級指標變數的地址賦給二級指標變數;

char

* pc;

pc = *pb; //對二級指標進行降級,得到一級指標變數。就賦值給一級指標變數pc;

對二級指標變數pb降級, 把它所指向的變數賦給指標變數pc;由於 pb 指向 pa 變數,所以,相當於把 pa 變數賦給 pc 變數;所以,pa 指標變數指向變數a,pc 指標變數也指向變數 a。

*pc = ‘B’;

對一級指標變數pc進行降級,得到它所指向的變數a,給變數a賦值字元‘B’;

**pb = ‘C’;

對二級指標pb進行兩次降級,可以分解如下:

(1) *pb 進行第一次降級,轉換為 pb 指向的變數,就是指向指標變數pa;

(2) **pb 如同 *pa,就是第二次降級,轉換為第一次降級得到 pa 指向的變數a;

(3) 所以,指標變數 **pb 轉換為變數a,最終給變數a賦值字元‘C’;

程式測試例子如下:

C語言指標,什麼是二級指標?整理、歸納、總結 linux C第38講

程式執行結果如下:

C語言指標,什麼是二級指標?整理、歸納、總結 linux C第38講

可以看到,二級指標變數就是存放一級指標變數的地址。對指標變數使用“指標取值運算子*”就是對指標變數進行“降級”,轉換為它指向的變數。就有:

(1) 二級指標變數降級,轉換為二級指標變數所指向的一級指標變數;

(2) 一級指標變數降級,轉換為一級指標變數所指向的變數;

注意:一級指標變數只能夠使用一個取地址運算子*降級,如果使用兩個,就會出現異常,我們來分析 一下:

char

a;

char

* pa = &a;

//指標變數pa指向變數a;

**pa =

‘A’

其中,對一級指標變數pa使用兩個指標取值運算子*進行降級,可以分解如下:

(1) 先進行第一次降級,*pa 轉換為指標變數pa所指向的變數a;

(2) 第二次降級,是對 *pa 表示的變數a進行降級,如同 *a 表示式,此時,出現異常,因為變數a不是指標變數,所以,不可以使用取地址運算子*進行操作。

透過上面的分析和總結,我們可以定義三級指標變數,如下:

char

a;

//定義char型別變數a;

char

* pa = &a;

//定義一級指標pa,指向變數a;

char

** pb = &pa;

//定義二級指標pb,指向指標變數pa;

char

*** pc = &pb;

//定義三級指標pc,指向二級指標變數pb;

可以看到,指標變數pc是三級指標變數。對它的操作,可以使用取指標運算子*進行降級操作。注意:在一般的專案開發過程中,不要定義難懂晦澀的程式碼,避免多級指標的使用。如果需要用到三級指標,應該考慮是否有其他方案可以代替,避免容易出錯的程式碼設計。