指標的指標

2021-08-25 22:32:15 字數 1261 閱讀 1203

二、指標的指標

指標的指標看上去有些令人費解。它們的宣告有兩個星號。例如:

char ** cp;

如果有三個星號,那就是指標的指標的指標,四個星號就是指標的指標的指標的指標,依次類推。當你熟悉了簡單的例子以後,就可以應付複雜的情況了。當然,實際程式中,一般也只用到 二級指標,三個星號不常見,更別說四個星號了。

指標的指標需要用到指標的位址。

char c=』a』;

char *p=&c;

char **cp=&p;

通過指標的指標,不僅可以訪問它指向的指標,還可以訪問它指向的指標所指向的資料。下面就是幾個這樣的例子:

char *p1=*cp;

char c1=**cp;

你可能想知道這樣的結構有什麼用。利用指標的指標可以允許被呼叫函式修改區域性指標變數和處理指標陣列。

void findcredit(int **);

main()

;int *fp=vals;

findcredit(&fp);

printf(%d\n,*fp);

}void findcredit(int ** fpp)

首先用乙個陣列的位址初始化指標fp,然後把該指標的位址作為實參傳遞給函式findcredit()。findcredit()函式通過表示式**fpp間接地得到陣列中的資料。為遍歷陣列以找到乙個負值,findcredit()函式進行自增運算的物件是呼叫者的指向陣列的指標,而不是它自己的指向呼叫者指標的指標。語句(*fpp)++就是對形參指標指向的指標進行自增運算的。但是因為*運算子高於++運算子,所以圓括號在這裡是必須的,如果沒有圓括號,那麼++運算子將作用於二重指標fpp上。

三、指向指標陣列的指標

指標的指標另一用法舊處理指標陣列。有些程式設計師喜歡用指標陣列來代替多維陣列,乙個常見的用法就是處理字串。

char *names=

;main()

先用字元型指標陣列names的位址來初始化指標nm。每次printf()的呼叫都首先傳遞指標nm指向的字元型指標,然後對nm進行自增運算使其指向陣列的下乙個元素(還是指標)。注意完成上述認為的語法為*nm++,它首先取得指標指向的內容,然後使指標自增。

注意陣列中的最後乙個元素被初始化為0,while迴圈以次來判斷是否到了陣列末尾。具有零值的指標常常被用做迴圈陣列的終止符。程式設計師稱零值指標為空指標(null)。採用空指標作為終止符,在樹種增刪元素時,就不必改動遍歷陣列的**,因為此時陣列仍然以空指標作為結束。

指標 陣列指標 指標陣列 指向指標的指標

程式中一般通過變數名對變數進行訪問操作,其實質是通過位址進行的。對變數的訪問分為直接訪問和間接訪問,如語句 printf d i 執行的時候,根據變數名 與位址的對應關係,找到i的位址,依次取相應的位元組數中的資料 即i的值 把它輸出。這種按照變數位址訪問變數值的方式成為直接訪問 還可以將變數i的位...

指標, 指標的指標, 陣列, 指標陣列, 陣列指標

指標 int a 10 int p a 指標的指標 int b 20 int p b int p2p p 簡單陣列 int c 10 整數陣列,含有10個整數元素 也就是說每乙個元素都是整數 指標陣列 int p 10 指標陣列,含有10個指標元素 也就是說每乙個元素都是指標 陣列指標 int p ...

函式指標 指標函式 指標的指標 指標陣列

一 函式指標 首先它是乙個指標,只是這個指標指向的是乙個函式。指標變數可以指向變數的位址 陣列 字串 動態分配位址,同時也可指向乙個函式,每個函式在編譯的時候,系統會分配給該函式乙個入口位址,函式名表示這個入口位址,那麼指向函式的指標變數稱為函式指標變數。表示 struct file operati...