c語言指針的指針
阿新 • • 發佈:2018-08-18
all .com color ptr 圖片 style alt 指針 malloc
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語言指針的指針