c/c++语言开发共享C++中的传值与传址

在指针的传递中,也涉及到传值与传址的问题。下面通过一个函数进行说明。 代码如下: 在上面的代码中,执行过openBinary函数后,buffer_0依然是一个空指针。 原因是因为执行openBinary函数时,函数生成了一个值与buffer_0相同的uchar*临时变量buffer,在分配内存前,临 …

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

代码如下:

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是可以获得内存的。

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

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/603024.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐