*p 與**p 參數

1.原來指針和指針的指針這個老概念也不是很好理解的

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一直嗎?可是這裏是指針,不是其他類型。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章