C++中 引用 和 const
来源:互联网 发布:澳门网络博客 编辑:程序博客网 时间:2024/05/16 08:00
在C++中,引用是给已经存在的变量取一个别名,引用既可以传值也可以达到指针的效果,它和它的引用的变量共用同一块内存空间。
1.引用
定义的格式为:
类型 &引⽤变量名 = 已定义过的变量名;
int a=10;//定义一个整型变量int &ra=a;//&为引用标志,ra与a类型必须一样
数组的引用
int a[10];int(&ra)[10]=a;
引⽤的性质:
1. ⼀个变量可取多个别名
2. 引⽤必须初始化
3. 引⽤只能在初始化的时候引⽤⼀次,不能改变为再引⽤其他的变量。
2.const引用 (常引用)
void Test (){ int d1 = 4; const int & d2 = d1; d1 = 5; // d1改变 d2的值也会改变。 //d2 = 6; // 不能给常量(不能被修改的量)赋值 const int d3 = 1; //int&d5 = d3; //d1不能被修改,d5可以去修改d3的值,所以错误 const int & d6 = d3; // 常量具有常性,只有常引用可以引用常量 double d7 = 1.1; //int& d8 = d7; //类型不同,不能引用。 const int& d9 = d7; //加const,d9=1,因为生成了临时变量,但是不是引用,d9和d7地址不同}
3.引用做引用传参和返回值
引用作为参数
1.【值传递】如果形参为⾮引⽤的传值⽅式,则⽣成局部临时变量接收实参的值
void Swap (int left, int right) // 这能实现交换吗?{ int temp = left; left = right ; right = temp ;}
优点:不会影响实参
缺点:无法通过修改参数改实参
2.【引⽤传递】如果形参为引⽤类型,则形参是实参的别名。
void Swap (int& left, int& right)//形参是外部实参的别名{ int temp = left; right = left ; left = temp ;}
3.【指针传递】
void Swap (int* pLeft, int* pRight){ int temp = *pLeft; *pLeft = *pRight; *pRight = temp;}
优点:可以通过参数改参数
缺点:指针选错容易出错
引用做返回值
1. 不要返回一个临时变量的引用。2. 如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更有效。
4.对比指针和引用
引⽤和指针的区别和联系(注意笔试的时候⾮常喜欢考这个知识点)
1. 引用在定义时必须初始化,指针无要求
2. 一旦一个引用被初始化为指向一个对象,就不能再指向其他对象;
指针可以在任何时候指向任何一个同类型对象。
3. 没有NULL引用,但有NULL指针。
4. 在sizeof中含义不同:引用结果为引用类型大小;但是指针始终是地址空间所占的字节数;(32位平台下为4个字节,64位平台下为8个字节。)
5. 引用自加改变变量内容,指针自加改变指针指向下一个类型的大小。
6. 有多级指针,但无多级引用。
7. 引用比指针使用起来安全。
总结⼀下: 指针⽐引⽤更灵活,但是也更危险。使⽤指针时⼀定要注意检查指针是否为空。指 针所指的地址释放以后最好置0,否则可能存在野指针问题。
阅读全文
0 0
- C++:const和引用
- c和c++中const,指针和引用
- C++const对象和 引用
- C++:指针、引用和CONST
- C++中 引用 和 const
- C和C++中const的区别,引用,一级指针和const组合
- 引用和const引用
- 引用和const引用
- 引用和const引用
- 【c/c++】const引用
- C/C++中关于地址、指针和引用变量的学习笔记(六) : const和void
- 函数参数中const 引用 和 传值
- C++中const和C++的引用
- 二、从C到C++(二) 引用、引用常见用途、指针和引用区别、const引用
- const引用和const指针
- const指针和const引用
- const引用和非const引用
- c++ const引用和非const引用
- zcmu-1198
- Html语言简介
- Vue -页面同步插件,很有意思。
- [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应
- JS运行三部曲---预编译
- C++中 引用 和 const
- 主席树 poj2104
- Java中 Random随机用法与List集合配套使用实现随机点名
- 35 个 Java 代码性能优化总结
- 虚拟机字节码执行引擎
- 区块链+体育赛事怎么玩?拥有300万用户的格斗迷有话说
- windows下python安装Numpy、Scipy、matplotlib模块
- mfc资源视图在另一个编辑器中打开
- 如何改变DOS命令行中编码格式