C語言二級指標用途
阿新 • • 發佈:2022-05-31
首先,C語言中不存在引用,所以當你試圖改變一個指標的值的時候必須使用二級指標。
學習C語言的一定知道:
- C語言中引數傳入函式的過程為值傳遞,函式中修改的區域性變數的值對原來的實參並沒有影響。
- 當使用一級指標作為引數傳入函式的過程為地址傳遞, 函式的實際操作是對指標的操作,那就可以通過函式中對於實參指標的修改達到修改實參的值的目的。
即:我們通過傳遞指標來達到修改一個值的目的。那麼當我們需要修改一個指標的時候呢,這個時候我們就需要指標的指標(二級指標):
void GetMemory(char **p,int num) { *p=(char*)malloc(sizeof(char)*num); //此時*p就變成了是形參本身的地址 } void main() { char *str=NULL; GetMemory(&str,100); //&str是實參的地址,所以實參和形參之間就可以直接呼叫 strcpy(str,"hello"); free(str); }
上述程式碼的易錯寫法是什麼樣呢:
void GetMemory(char *p,int num)
{
p=(char*)malloc(sizeof(char)*num); //p是形參指向的地址
}
void main()
{
char *str=NULL;
GetMemory(str,100); //str是實參指向的地址,不能通過呼叫函式來申請記憶體
strcpy(str,"hello");
}
我們再強調下結論:
- 指向指標的指標的作用 :當要修改實參指標的指向的時候,形參必須使用指向指標的指標。
- 當修改的是實參指標指向的內容時,則形參只需是指標即可
關於值傳遞:
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是一個地址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。
參考文獻: