本文目錄一覽:
C語言中建立動態鏈表要用雙重指針嗎?那個雙重指針有什麼作用?
舉個例吧,
假如一個結構:LinkNode
初始化:Initial(LinkNode **p);//這裡就是雙指針
那麼在調用就這樣,
LinkNode *p;
Initial(p);
原理就是,如果你要通過函數來改變某個參數的值,那麼就要傳該參數的地址進去。
這裡p是一個指針,所以要傳指針的地址進去,也就是一個指向指針的指針;
初始化函數Initial(LinkNode *(*p));(*p)是指針,*(*p)就是傳指針的地址進去了,意思就這樣,不知道你聽不聽得懂。
不管動態還是靜態,只要是要通過函數來改變指針類型數據的值,就要用雙重指針。
C語言高手進關於雙重指針 多重指針的問題
1、多重指針常用於多維數組或者多維字元串的操作,有時也用於函數參數傳遞;
2、指針是C語言的一個重要知識點,你可以簡單理解為地址。多重指針需要通過多次定址才能找到實際的值。這裡一個示例:
# includestdio.h
int main()
{
unsigned int x=0x1234;
unsigned int *p1=NULL;
unsigned int **p2=NULL;
unsigned int ***p3=NULL;
p1=x;
p2=p1;
p3=p2;
printf(“\n x=0X%X, x=:0X%X”,x,x);
printf(“\n *p1=0X%X, p1=:0X%X, p1=:0X%X”,*p1,p1,p1);
printf(“\n **p2=0X%X, *p2=:0X%X, p2=:0X%X, p2=0X%X”,**p2,*p2,p2,p2);
printf(“\n***p3=0X%X, **p3=:0X%X, *p3=:0X%X, p3=:0X%X, p3=:0X%X”,***p3,**p3,*p3,p3,p3);
return 0 ;
}
顯示結果:
x=0X1234, x=:0X6C56C298
*p1=0X1234, p1=:0X6C56C298, p1=:0X6C56C290
**p2=0X1234, *p2=:0X6C56C298, p2=:0X6C56C290, p2=0X6C56C288
***p3=0X1234, **p3=:0X6C56C298, *p3=:0X6C56C290, p3=:0X6C56C288, p3=:0X6C56C280
所有類型變數都可以通過獲得該變數在內存中的地址,從以上示例看出
變數x在內存中的地址為:0X6C56C298
指針變數p1的地址為:0X6C56C290
指針變數p2的地址為:0X6C56C288
指針變數p3的地址為:0X6C56C280
以上變數按照定義先後順序在內存中從高地址到低地址連續存儲的,每個變數佔據8個位元組空間。
其中p3的值(也就是0X6C56C280這個地址的內存中存放的數據)為p2的地址。
p2的值(也就是0X6C56C288這個地址的內存中存放的數據)為p1的地址。
p1的值(也就是0X6C56C290這個地址的內存中存放的數據)為x的地址。
要取得最終的0x1234這個數據,幾重指針前面就有幾個*,比如***p3就表示0x1234這個具體的值。只要少一個*,那麼獲得的就是地址。
C語言的單鏈表在開創內存空間時為什麼要用到雙重指針?
你的意思是這樣嗎
List *L;
insert(L);//初始化insert(List **L)
你問的是 初始化中 為什麼要雙重指針嗎?
如果是的話,那麼意思是,你想通過函數來改變L的值,但是L是指針類型,所以你要改變它的值就要傳L的地址進去,因為雙重指針的意思就是指向指針的指針,就是指針的地址,那麼**L就是指向指針L的地址,那麼通過函數調用雙重指針就能改變指針L的值。
道理就是:要傳遞變數的地址才能使變數的值發生變化.現在的變數是指針型,所以要傳指針類型的地址,也就是雙重指針。
不知道我理解對了沒
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/250793.html