指針變量存儲的是地址,所以在函數調用的時候我們能否將指針變量傳遞給函數?如果不知道結果,那我們可以直接問電腦,輸入如下一段代碼。
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL; //申明字符串指針str並讓它指向空地址
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
str為局部變量,當傳遞給函數時,函數不能真正使用str,用的只是str的一個備份,str的值不變。
此處str的值仍然為NULL,malloc分配的內存地址並沒有賦給str。如何實現呢,執行到這發生訪問沖突
那么如何解決這個問題呢?
一共有兩個方法
1、通過return返回地址
char *GetMemory(char *p)
{
p = (char *)malloc(100);
return p;
}
void Test(void)
{
char *str = NULL; //申明字符串指針str並讓它指向空地址
str=GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
第二種方法就是通過二級指針
void GetMemory(char **p)
{
*p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL; //申明字符串指針str並讓它指向空地址
GetMemory(&str);
strcpy(str, "hello world");
printf(str);
}
其實這個題目就相當於,我們平時在自己電腦上編輯文檔,然后我們用U盤拷貝了一份給同學,我現在顯然不可以通過改變同學的文檔來改我的文檔,但是我們可以讓同學改好后,把他改好的文檔再發給我,或者,我把我文檔上傳到一個網盤上,通過網盤,改動我的文檔,網盤就相當於一個二級指針。
