关于双指针的简单理解

2020-08-13 15:27:30 浏览数 (1)

运行代码

代码语言:javascript复制
#include <iostream>
 
void GetMemeory(char *p)
{
    p = (char *)malloc(100);
}
void Test()
{
    char *str = NULL;
    GetMemeory(str);
    strcpy(str, "Thunder");
    strcat(str   2, "Downloader");
    printf(str);
}

运行结果

代码语言:javascript复制
程序崩溃

程序解释

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

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

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

代码语言:javascript复制
void GetMemory(char **p){
    *p = (char *)malloc(100);
}
 
void Test(){
    char *str = NULL;
    GetMemory(&str);
    strcpy(str,"Thunder");
    strcat(str 2,"Downloader");
    printf(str);
}

0 人点赞