tft每日頭條

 > 生活

 > c語言指針知識點重要嗎

c語言指針知識點重要嗎

生活 更新时间:2025-03-01 23:01:12
二級指針

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

c語言指針知識點重要嗎(什麼是二級指針)1

程序運行結果如下:

c語言指針知識點重要嗎(什麼是二級指針)2

可以看到,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語言指針知識點重要嗎(什麼是二級指針)3

程序運行結果如下:

c語言指針知識點重要嗎(什麼是二級指針)4

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

(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是三級指針變量。對它的操作,可以使用取指針運算符*進行降級操作。注意:在一般的項目開發過程中,不要定義難懂晦澀的代碼,避免多級指針的使用。如果需要用到三級指針,應該考慮是否有其他方案可以代替,避免容易出錯的代碼設計。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved