• C++中的传值与传址


    在指针的传递中,也涉及到传值与传址的问题。下面通过一个函数进行说明。

    代码如下:

    bool openBinary(uchar* buffer)
    {
        long lSize = 1024;
        buffer = (uchar*)malloc(sizeof(uchar)*lSize);
        return true;
    }
    int main(int agrc, char *agrv[]){
      uchar *buffer_0 = NULL;
      openBinary(buffer_0);
      return 0;
    }

    在上面的代码中,执行过openBinary函数后,buffer_0依然是一个空指针。

    原因是因为执行openBinary函数时,函数生成了一个值与buffer_0相同的uchar*临时变量buffer,在分配内存前,临时变量buffer和buffer_0的值相同,但在分配内存后,动态分配的内存地址赋值给了临时变量buffer。从此刻开始,临时变量buffer的值和buffer_0的值就不一样了,buffer_0依然是一个空指针,而临时变量buffer指向了新分配内存的首地址。openBinary函数执行完毕后,临时变量buffer被销毁,成为buffer_0的一个过客,而buffer曾指向的内存也不知所向,最后buffer_0一无所获。

    如果像让buffer_0最终获得内存,在函数调用时就需要传址而非传值。

    代码如下:

    bool openBinary(uchar* &buffer)
    {
        long lSize = 1024;
        buffer = (uchar*)malloc(sizeof(uchar)*lSize);
        return true;
    }
    int main(int agrc, char *agrv[]){
      uchar *buffer_0 = NULL;
      openBinary(buffer_0);
      return 0;
    }

    上述代码中,openBinary函数中传入了buffer_0的引用,在动态内存的分配中,buffer_0是真实参与其中的,函数执行过后,buffer_0是可以获得内存的。

    最后注意,内存使用完毕后要进行释放。

  • 相关阅读:
    vue-cli3 中跨域解决方案
    自定义超链接动画---transition
    Vue 单选框与单选框组 组件
    js 控制随机数生成概率
    Vue slot插槽
    vue 组件通信
    vue中computed计算属性与methods对象中的this指针
    C#提取html中的汉字
    MVC几种找不到资源的解决方式
    使用Windows服务定时去执行一个方法的三种方式
  • 原文地址:https://www.cnblogs.com/Peyton-Li/p/11023029.html
Copyright © 2020-2023  润新知