這一則是關於函式指標引數的。我們經常犯下面這樣的錯誤。
void getpointer(char *p)
int main()
在上面**中,最終會產生error。主要是因為在main函式中,指標p始終都是nullptr空指標。
當我們使用函式指標引數時,我們雖然傳入了乙個指標引數p,但是,在函式getpointer內部,會複製這個指標引數。
所以,在函式getpointer內部,指標p和main函式裡面的p指向是相同的,但是卻是兩個指標。
因而,修改getpointer函式裡面的p指標,不會影響main函式的p指標。main函式的p指標依舊指向nullptr。
我們可以將**修改為如下:
void getpointer(char **p)
int main()
上面**通過指標的指標,使得指標p裡面的值進行修改。所以,需要記住的一點是:
作為函式指標引數,我們只能改變這個指標引數裡面的值,並不能改變其本身。
函式引數的傳遞問題(指標的指標)
程式1 void mymalloc char s 我想在函式中分配記憶體,再返回 s char malloc 100 void main char p null mymalloc p 這裡的p實際還是null,p的值沒有改變,為什麼?if p free p 程式2 void mymalloc cha...
函式指標 函式指標做函式引數
陣列型別如何定義 typedef int myarray 5 這是我定義的陣列型別,這個型別的名字是myarray,它的本質是乙個記憶體固定大小模板 myarray arr arr是乙個陣列 大小為5 型別的變數。可以這樣訪問arr 0 arr 1 arr 2 typedef int myp 5 定...
函式的指標引數傳遞問題 理解指標變數
我們預期的結果是輸出兩個 a.可是執行的結果卻是下圖。為什麼只輸出了乙個a?下面我們分析一下 在fun1中,我們用malloc分配了一段記憶體,並將該段記憶體的首位址放在指標變數n,然後我們就用n這個位址,開始給結構體賦值。在fun2中,我們以為在fun1中已經給node分配好了記憶體,也賦好值了。...