关于双指针的简单理解

运行代码

 1 #include 
 2  
 3 void GetMemeory(char *p)
 4 {
 5     p = (char *)malloc(100);
 6 }
 7 void Test()
 8 {
 9     char *str = NULL;
10     GetMemeory(str);
11     strcpy(str, "Thunder");
12     strcat(str + 2, "Downloader");
13     printf(str);
14 }

运行结果

程序崩溃

程序解释

首先,函数为按值传递,所以p和str指向的是同一个NULL;

GetMemory函数执行完后,为p指向的空间增加了内存空间,但str仍然指向NULL;

要修改实参,就要传递实参的地址,因此需要传递二级指针,修改如下:

 1 void GetMemory(char **p){
 2     *p = (char *)malloc(100);
 3 }
 4  
 5 void Test(){
 6     char *str = NULL;
 7     GetMemory(&str);
 8     strcpy(str,"Thunder");
 9     strcat(str+2,"Downloader");
10     printf(str);
11 }

 

 

你可能感兴趣的:(关于双指针的简单理解)