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;
    }
  • 相关阅读:
    USACO Broken Necklace 通过了
    USACO Broken Necklace
    推荐顺序ACM
    usaco暂时无法访问
    格式
    稳定排序
    归并排序
    浅析Struts1和Struts2的Action线程安全问题
    判别式模型与生成式模型的区别
    远景能源一面
  • 原文地址:https://www.cnblogs.com/sunchuankai/p/11530669.html
Copyright © 2011-2022 走看看