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

代码如下:

bool openBinary(uchar* buffer)
{
long lSize = ;
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 = ;
buffer = (uchar*)malloc(sizeof(uchar)*lSize);
return true;
}
int main(int agrc, char *agrv[]){
  uchar *buffer_0 = NULL;
  openBinary(buffer_0);
  return ;
}

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

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

C++中的传值与传址的更多相关文章

  1. java方法中,传参是传值还是传址问题(对比C语言、C#和C++)

    问题引出: 编写一个简单的交换值的小程序,如果我们只是简单地定义一个交换函数接收两个数,在函数内部定义一个中间变量完成交换.那么当我们把a,b两个实参传给这个函数时,往往得不到预期的结果.这是为什么呢 ...

  2. JAVA传值与传址

    要了解JAVA中的传值与传址问题,必要先要了解JVA中的栈内存和堆内存,>>>>点些查看<<<<昨天写的学习记录 栈:基本数据类型.数据的引用变量,这两 ...

  3. javascript的变量,传值和传址,参数之间关系

    先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...

  4. Python的传值和传址与copy和deepcopy

    1.传值和传址 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针).他们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变,用传值传入的参数是不会 ...

  5. 图解JS的传值与传址

    //编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值.与传址. //先讲讲赋值操作 //下例是原始类型赋值操作 var a=1,b=a,a=2; console.log("a=& ...

  6. javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象

    对象字面量  JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay&quo ...

  7. 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址

    在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...

  8. Python 传值和传址 copy/deepcopy

    传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...

  9. js- 引用和复制(传值和传址)

    js- 引用和复制(传值和传址) 好像一般很少人讲到js中的引用和复制,不过弄清楚这个概念可以帮助理解很多东西 先讲一下很基础的东西,看看js中几种数据类型分别传的什么引用:对象.数组.函数复制:数字 ...

随机推荐

  1. ABP入门教程12 - 展示层实现增删改查-脚本

    点这里进入ABP入门教程目录 创建目录 在展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\下新建文件夹Course //用以存放Course相关脚 ...

  2. NTP and Chrony在RHEL

    在RHEL7上,Chrony已经代替了NTP来做时间同步服务. 1 服务器上操作 yum -y install chrony vim /etc/chrony.conf # Allow NTP clie ...

  3. IT开发、PM、UI/UE学习路线图(非原创-参考传智播客网站介绍)

    文章大纲 一.Go语言+区块链学习路线图二.PHP学习路线图三.Python学习路线图四.C/C++学习路线图五.大数据学习路线图六.经理学习路线图七.UI/UE路线图八.参考文章 一.Go语言+区块 ...

  4. sqlite数据类型与c#数据类型对应表

    SQLite 数据类型 C# 数据类型   BIGINT Int64   BIGUINT UInt64   BINARY Binary   BIT Boolean 首选 BLOB Binary 首选 ...

  5. centos7.6 安装Mysql5.7

    #安装Mysqlwget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpmyum localinstall mys ...

  6. shell-homeworkone

    1.判断/etc/inittab文件是否大于100行,如果大于,则显示”/etc/inittab is a big file.”否则显示”/etc/inittab is a small file.” ...

  7. 5.jenkins 构建任务2--PHP项目

    推送代码 PHP 项目 然后我们要做的就是将 .jenkins下面 workspace下的代码. 推送到我们的项目机器上面 就ok了. 我们可以在php的jenkins的 项目配置中选择使用shell ...

  8. hebust-fengyu

    三人行必有我师焉,择其善者而从之,其不善者而改之. 入则无法家拂士,出则无敌国外患者,国恒亡,然后知生于忧患而死于安乐也. 狡兔死走狗烹,飞鸟尽良弓藏,敌国尽谋臣亡 今齐地方千里,百二十城,宫妇左右莫 ...

  9. Redis 内存淘汰机制

    Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况,那么Redis为什么要有这种功能?这就是我们需要探究的设计初衷.Redis最常见的两种应用场景为 ...

  10. Python连载52-SOCKET编程示例

    一.UDP编程 1.客户端Client:发起访问的一方. 2.服务器端 3.server段编程 (1)建立socket,socket是负责具体通信的一个实例 (2)绑定,为创建的socket指派固定的 ...