void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void main(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
以上程序雖然把str所指向的區域賦給了p,但是p後來又指向了malloc的內存區域,結果str指向的區域並沒有得到分配,導致結果的錯誤。
要使str指向的區域得到分配,必須讓分配的空間的地址是指針str的地址,於是就有了&str作爲參數傳給**p,這樣p裏面的內容就是&str了,再*p就行了!
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
好像這個問題就是以前關於行參實參中關於傳地址和傳內容的問題,只不過這裏要分配的是字符數組,數組名就“相當於“指針了,所以要用到指針的指針了!!
不知道能不能用引用來實現,不就是爲了保持p和str一直嗎?可是這裏是指針,不是其他類型。