zoukankan      html  css  js  c++  java
  • 刷题碰到的二级指针运用

    题目大致是:

    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;
    }
  • 相关阅读:
    005. gitlab安装
    004. github使用
    003. git标签
    TS标红和报错解决(优化项)
    catalog连接数据库与sde权限问题
    博客新生企划
    HDU 7105 Power Sum
    HDU 7131 Nun Heh Heh Aaaaaaaaaaa
    BZOJ 1691 挑剔的美食家
    洛谷 4254 Blue Mary 开公司
  • 原文地址:https://www.cnblogs.com/sunchuankai/p/11530669.html
Copyright © 2011-2022 走看看