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;
    }
  • 相关阅读:
    LeetCode
    LeetCode
    static,final,包,访问修饰符,内部类
    抽象类和抽象方法接口和多态
    抽象类和抽象方法
    memcache的使用、版本使用和相关配置
    apache mysql无法启动解决办法
    thinkphp实现文件的下载
    xampp 出现403 无法访问问题(已解决)
    Thinkphp使用phpexcel导入文件并写入数据库
  • 原文地址:https://www.cnblogs.com/sunchuankai/p/11530669.html
Copyright © 2011-2022 走看看