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;
    }
  • 相关阅读:
    毕业设计(五)
    毕业设计:周计划任务(四)
    毕业设计:周计划任务(三)
    毕业设计:周计划任务(二)
    毕业设计:周计划任务(一)
    运行jar包
    常见算法
    mybatis入门
    策略模式
    java面2
  • 原文地址:https://www.cnblogs.com/sunchuankai/p/11530669.html
Copyright © 2011-2022 走看看