c語言中不存在引用,所以當你試圖
改變乙個指標的值的時候必須使用二級指標。
1.當不用指標時,引數傳入子函式的過程為值傳遞,子函式中修改的區域性變數的值對原來的實參並沒有影響。
2.當用一級指標時,引數傳入子函式的過程為位址傳遞,
子函式的實際操作是對指標的操作,那就可以通過子函式中對於實參指標的修改達到修改實參的值的目的。
我們通過傳遞指標來達到修改乙個值的目的。那麼當你需要修改乙個指標的時候呢,這個時候我們就需要指標的指標(二級指標):
3.當用二級指標時,是為了修改乙個指標
int fun()fun()函式通過呼叫init1()函式實現給p分配記憶體空間的目的。int init1(int **a)
p為乙個指標,&p就是指向指標p的乙個指標(二級指標),
通過把&p傳遞給init1()函式,此時二級指標a=&p,所以說a是指向指標p的乙個指標。 那麼
對於*a的操作,實際上就是對於指標p的操作,達到了修改指標的目的,這樣fun()就可以通過init1()函式來分配記憶體空間了。
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。
C語言中使用二級指標
通常指標作為函式引數時,我們傳進來的是乙個引數的引用型別,我們對引用型別的理解,簡單來說就是可以使原來的值發生變化,而不是在函式中生成某個變數的備份。設想這樣乙個場景,我想初始化乙個煉表頭節點,但是我又不想在main函式中去做這件事情,而是單獨拎出來去執行,傳入乙個頭節點,利用乙個init 函式,對...
C C 中二級指標的理解
以前在學習資料結構的時候一直沒弄懂函式引數裡面傳遞 p 以及使用 的含義,這裡摘抄了一小段文章方便理解。不懂的時候再看看這幾段 指標引數是如何傳遞記憶體的?如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體。見如下例子 void getmemory char ip,int num ip ch...
論C語言中二級指標和二維陣列之間的區別
剛開始學習c語言的時候,覺得乙個陣列可以定義乙個一級指標去訪問,想當然的就覺得可以定義乙個二級指標去訪問二維陣列。很顯然這是錯誤的。我們來看看c語言的陣列在記憶體中的儲存方式。實際上c語言中的陣列,實際上都是一維的。即不管是幾維的,都是通過陣列的陣列這種方式來建立的,實際上它們在記憶體中的儲存方式還...