&用在形参有什么好处呢?

最近我在复习数据结构,在打代码时发现了一个问题。书上很多形参前面都加了一个取地址符号,这到底是什么意思呢?
原来,这是C++的引用,一种语法。由于我以前没有学过C++,也就在这几天待在家里学了一下,所以在debug两个小时过程中发现它的好处!

引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。下面我举一个例子来说明引用作为形参的好处!

我们看下面这个函数。

void fuzhi(int a)
{a=1;
}

这是个赋值函数,学过C语言的都知道,这样并不会改变实参的值。
因此我们便把函数改成这样


void fuzhi1(int *a)
{*a=1;
}

因为把实参的地址传了进去,由于实参和形参的逻辑地址相同。因此地址内容的值改变了,实参也改变了。
但是!
如果传进去的地址的值改变了怎么办呢?例如下面这种情况

void fuzhi2(int *a)
{a=(int*)malloc(sizeof(int));*a=2;
}

malloc函数给a动态分配了一个新的内存空间,同时也给了一个新逻辑地址
这是,这个函数就起不到赋值的效果了,因为内容为2的是另一个逻辑地址里面的内容而不是实参逻辑地址里面的内容了,因此,如果我们形参的逻辑地址变了,实参的逻辑地址也变了的话,便可以实现此功能,而引用
正好可以实现这个功能!
当代码如下图所示时,传进去的a地址变了后,相当于对实参进行操作,实参地址也跟着改变,因此最终赋值成功!

typedef struct nn
{int a;
}*type,tt;
void fuzhi3(type &a)
{a=(type)malloc(sizeof(tt));a->a=2;
}
int main()
{type c;fuzhi3(c);cout<<c->a<<endl;}
}

结果如下

C++取地址符用在函数的形参的优势相关推荐

  1. c语言函数变量地址符,C语言中取地址符做函数形参?—— 引用的讨论

    取地址符&做函数形参? C语言强大且危险 引入 这个问题花去了整整一天的研究. 先看一段严蔚敏的<数据结构>中栈的例程: 这里面的&S第一遍看的时候想当然的认为是取了SqS ...

  2. 【重温经典C语言】~c语言中%x、%c、%d、%x等等等、c语言取地址符的作用、C语言中的 联合体

    本章目录: 1. c语言中%x.%c.%d.%x等等等 2. c语言取地址符&的作用 3. 了解 C语言中的 联合体 3.1 什么是联合体? 3.2 定义 3.2.1 举例 3.3 初始化联合 ...

  3. 取地址符和解引用符的区别_(&)和解引用(*)运算符的地址以及C中的指针...

    取地址符和解引用符的区别 Here, we are discussing about the two most useful operators with the pointers, why and ...

  4. 变量与指针、取值符与取地址符

    变量与指针.取值符与取地址符 一.基础知识 二.实例 其他 by HPC_ZY 也是偶然,在一个项目中需要多次交换二维数组中的值,逐个操作确实耗时,就想能不能利用指针操作快速交换.成功后写此文,记录分 ...

  5. C语言中 指针变量 取地址符的用法 *指针变量名的用法

    文章目录 总结 Intro Code 图示 总结 众所周知,内存可以看成一个一个相邻的格子(类比Excel),而数据就存储于这些格子之中(size大的变量占用格子数多,size小就占用小).而每个格子 ...

  6. C语言加取址符的作用,C语言中指针和取地址符的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  7. C++ 中的:“引用” 和“取地址符”的区别和作用

    引用 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. &作为引用的时候,必须在定义时候就进行初始化,若不进行初始化则会编译报错. int N; int &r ...

  8. c语言地址符作用,C语言中指针和取地址符的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  9. golang中new、make及取地址符()

    new简介及使用方式 new() 用于返回类型指针,这个操作:分两步,第一步:初始化一个变量为零的值,第二步:生成一个指向类型变量的地址. &Type 返回类型变量的地址,这个操作:分两步,第 ...

  10. 对字符数组输入输出数组名是否加取地址符的一些理解

    字符数组名的两个含义: 定义了字符型数组char name[10].name有两个含义: 一个是代表着name这个数组第一个位置的地址,也就是name[0]的地址.可以说name就等价于&na ...

最新文章

  1. android html.fromhtml 字体加粗,Android Html设置TextView的颜色、加粗样式
  2. WebLogic CVE-2021-2394 RCE 漏洞分析
  3. TABLES ABOUT CRM MARTETING
  4. 在eclipse中安装与配置maven环境
  5. getSerializableExtra
  6. 本地Android源代码库下载源码
  7. Android五大布局详解
  8. 周鸿祎重申360不依靠弹窗广告盈利 增值服务是主要模式
  9. Django中model新建数据表操作后admin页面不更新问题
  10. Android的ALSA声卡
  11. CSDN,我!王睿,回来了!!!
  12. 通信原理大作业--基于MATLAB的数字通信系统仿真设计
  13. 模式识别与机器学习 第一章 绪论
  14. MongoDB 后台创建索引、查看创建进度等
  15. mac制作u盘启动盘
  16. 信息学奥赛一本通 1196:踩方格 | OpenJudge NOI 2.6 4982:踩方格
  17. 对Java.io中一些类的归纳,层次结构图
  18. 使用okHttp下载文件到本地
  19. ASP.NET程序设计教程(C#版)——学习心得
  20. 关于AD前面的电压跟随器

热门文章

  1. 偏差、误差、训练误差、测试误差
  2. Cortex-M0和Cortex-M0+的异常类型
  3. 漫威女性电影背后所体现出来的性别观念转变
  4. DirectX--给视频加马赛克、字符OSD
  5. 【element-ui】el-table中slot-scope的使用,用于动态绑定className等
  6. wind7计算机控制面板在哪,联想win7系统控制面板在哪里打开
  7. 【Love2D】第0章-从零开始学习Love2D
  8. 会议论文分析-CCS21-ML增强的符号执行方法
  9. jQuery创建表格
  10. 小觅双目相机陀螺仪静态数据输出为0+timeshift ubuntu 系统备份