C++中的引用
来源:互联网 发布:kindle有用吗 知乎 编辑:程序博客网 时间:2024/06/13 23:20
引用
引用并不是新定义一个变量,而是一个已定义变量的别名。
定义的格式:
类型 &引用变量名 = 已定义的变量名
特点:
- 对一个已定义变量可多次进行引用
- 引用仅仅为别名
- 引用必须进行初始化
引用只能在初始化时引用一次,不能再改变为其他已定义变量引用
下面用代码进行示范:
void test(){ int a = 5; int b = 4; int &c = a; //c = b; //错误,因为引用不能再改变为其他已定义变量引用 c = 10; //a = 10,因为c为a的别名 int &d = c; //int &e; //错误,因为引用必须进行初始化 d = 8; //a = 8,因为d为a,c的别名}
const引用
不能通过const引用来对变量进行赋值。
下面用代码进行示
void test (){ int d1 = 4; const int & d2 = d1; d1 = 5; //d2 = 6; //不能给常量(能被修改的量)赋值 const int d3 = 1; const int & d4 = d3; //int&d5 = d3; //不能引用常量 const int & d6 = 5; // 常量具有常性,只有常引用可以引用常量 double d7 = 1.1; //int& d8 = d7;//d7是double类型,d8是int,d7赋值给 d8时要 生成一个临时变量 // 也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。}
引用做参数
如果形参为引用类型,那么形参则为实参的别名。如果对形参进行改变也会对实参进行改变。引用做参数与指针做参数相似,只不过引用做参数不需要传变量的地址。
如果函数的返回值为引用,那么引用对象不能为一个临时变量,返回对象的生命周期大于当前函数的作用域。
引用与指针
引用与指针的关系
- 在语言的内部引用其实是用指针来实现的
引用与指针的相同点
- 引用和指针都是地址的概念
引用与指针的区别:
- 引用必须进行初始化,而指针可以不进行初始化
- 引用不能为空,而指针可以为空
- 引用不可再引用其他变量,指针可以再指向其地址
- 引用的sizeof()得到的是引用类型的sizeof(),指针的sizeof()得到的是指针指向地址的sizeof()
- 对引用++得到的是引用内容++的结果,对指针++得到的是指针指向地址++的结果
- 引用是常量所以没有const,指针有const
下面用代码进行示
void test(){ double a = 10; char b = 0; double *c = &a; char *d = &b; double &e = a; char &f = b; cout << "sizeof(c):" << sizeof(c) << endl; cout << "sizeof(d):" << sizeof(d) << endl; cout << "sizeof(e):" << sizeof(e) << endl; cout << "sizeof(f):" << sizeof(f) << endl; cout << "++c:" << ++c << endl; cout << "++e:" << ++e << endl;}
运行结果:
总结:指针比引用更加强大也更加灵活,但同时也更加难以控制更加危险。
阅读全文
0 0
- c语言中的引用
- 【C++】:C++中的引用
- 深入探讨C 中的引用
- 深入探讨C 中的引用
- C++/CLI中的引用类型
- 深入探讨C 中的引用
- C++中的引用
- [C++]C++中的引用(转)
- 【引用】C中的类型转换
- C语言中的引用调用
- 深入探讨c++中的引用
- C/C++中的指针、引用和JAVA中的引用
- C/C++中的引用和指针
- c语言形参中的引用变量
- C/C++中的引用和指针
- C/C++中的引用和指针
- c语言实现cpp中的引用传递
- C和C++中的引用和指针
- MacOS基于树莓派的交叉编译实验
- DBCP连接池技术详解
- (五)ElasticSearch插入数据
- 亚马逊Amazon OA2 -LintCode 九道题-JAVA
- Codeforces869C-The Intriguing Obsession
- C++中的引用
- s5pv210-Linux驱动之USB键盘
- Kaldi学习手记:Kaldi的编译安装
- 大数据时代的数据获取
- 网易校招(字符碎片和重排数列)
- 数据结构学习1
- 几种常见地址的区分
- 顺序存储结构和链式存储结构的优缺点比较
- Ubuntu 16.04的caffe环境配置:cuda 8.0+cudnn 8.0+opencv3.1.0 + python2.7 + matlab2016b + blas(OpenBlas)