刷题碰到的二级指针运用

题目大致是:

void Func(char* p){

void Func(char* p){
    p=(char*) malloc(100);
}


/////////////////////////////////////////////////////////////////////////////////////
int main() {
char *str =NULL;
    Func(str);
    strcpy(str,"Hello");

    return 0;
}

问题大概是str有没有复制Hello字符串, 答案是没有, 因为 Func里面p指针没有传递给str,也就是说p是个形参在str作为实参的时候。相当于:

void Func(char p){
    p ='a';
}
/////////////////////////////////////////////////////////////////////////////////////
int main() {
char str =NULL;
    Func(str);
    cout<<str;
    return 0;
}

str没有被赋值.

所以上面的方程要改成:

void Func(char** p){
    *p=(char*) malloc(100);
}

/////////////////////////////////////////////////////////////////////////////////////
int main() {
char *str =NULL;
    Func(&str);
    strcpy(str,"Hello");

    cout<<str;
    return 0;
}

如果是二级指针的话就变成了指向指针的指针,就不会丢失形参的数据。

我个人不是很喜欢二级指针, 在想如果要一样的效果的话用指针引用是不是也行,代码是:

void Func(char *&p){
    p=(char*) malloc(100);
}

/////////////////////////////////////////////////////////////////////////////////////
int main() {
char *str =NULL;
    Func(str);
    strcpy(str,"Hello");

    cout<<str;
    return 0;
}
原文地址:https://www.cnblogs.com/sunchuankai/p/11530669.html