標籤:turn 並且 技術 .com 面經 main 存在 inf 可靠
c語言在函數傳遞時常常使用如下的形式。
1 void get(int **p)
對於這個形式,我想過為什麼不能夠使用 *p 作為形參呢。下面我們看一下代碼和執行結果
1 void get(int **p) 2 { 3 printf("%p\n",*p); 4 *p = (int *)malloc(sizeof(int) * 5); 5 printf("%p\n",*p); 6 } 7 8 int main() 9 {10 int *ptr = NULL;11 printf("%p\n",ptr);12 get(&ptr);13 printf("%p\n",ptr);14 return 0;15 }
由這個結果可以看出一開始ptr初始化為NULL,後面經過get()函數以後ptr的指標為00511448,包括後面的函數退
出以後ptr的值也是00511448 。但是下面指傳入指標的結果相比較,我們就可以發現問題了。
1 void get(int *p) 2 { 3 printf("%p\n",p); 4 p = (int *)malloc(sizeof(int) * 5); 5 printf("%p\n",p); 6 } 7 8 int main() 9 {10 int *ptr = NULL;11 printf("%p\n",ptr);12 get(ptr);13 printf("%p\n",ptr);14 return 0;15 }
在上面的結果看出來,函數結束以後,ptr的值為00000000了,不再和上面的結果一樣。
從這裡我們可以看出來問題了。傳入的是指標的值,值是可以改變的。所以在後面函數結束以後ptr的值就被改變
了。如果後面我們需要用到這個指標,那麼得到的結果就是錯誤的,是不可靠的 ;所以我們需要向函數中傳遞一
個地址,然後在函數結束後,內部分配的地址就依然存在並且ptr指向這個地址,可以使用。!!!!
c語言指標的指標