引用
2016-01-23 21:57
204 查看
概念
引用可以看做一个已定义变量的别名引用的语法 Type& name = var;
引用代替指针
//引用 int swap1(int& a,int& b) { int t; t = a; a = b; b = t; } 指针 int swap2(int* a,int* b) { int t; t = *a; *a = *b; *b = t; }
效果一样但是显然引用更好用些
const引用(重要)
形式:const Type& name = var;c++工程
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { const int a = 1;//常量 const int& b = 1;//只读变量 int *pa = (int*)&a; int *pb = (int*)&b; *pa = 10;//修改常量 *pb = 10;//修改变量 printf("a = %d\n",a); printf("b = %d\n",b); return 0; }
得到的结果是a =1,b = 10;
C工程
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { const int a = 1; int *pa = (int*)&a; *pa = 10; printf("%d\n",a); return 0; }
输出结果a = 10
结论:C++中const int a = 1;,中的a是只读常量,存在符号表中,而C中的a为只读变量,在C++中要定义只读变量得定义成const int& a = 1;
引用占用的空间(引用本质)
考虑以下代码:#include <stdio.h> struct TRef { int& a; int& b; }; int main(int argc, char *argv[]) { printf("sizeof(TRef) = %d\n", sizeof(TRef)); getchar(); return 0; }
在32位机中,一个引用占用4个字节,
重要:C++在编译过程中使用常指针作为引用的内部实现,所以 int& name <=> int* const name
函数返回值为引用
1. 若返回栈局部变量(栈变量):*不能成为其他引用的初始值,(函数结束后栈变量被释放,再给被释放发的地址取别名显然没有意义)
*不能作为左值使用(同理)
若返回静态变量或全局变量
*可以成为其他引用的初始值
*可以作为右值也可作为左值
#include <stdio.h> int& f()//返回静态变量 { static int a = 0; return a; } int& g()//返回局部变量 { int a = 0; return a; } int main() { int a = g(); int& b = g(); f() = 10;//引用可以出现这种形式的赋值 printf("a = %d\n", a); printf("b = %d\n", b); printf("f() = %d\n", f()); getchar(); return 0; }
输出:a = 0,b = -2,f() = 10
相关文章推荐
- sed将换行替换成空格或者其他字符
- linux下samba共享服务器搭建
- netty 高并发实战
- linux下goagent证书问题终极解决方案!
- 当鼠标进入li标签,给标签中的img元素加缩放效果
- 看清谁才更爱你
- spring+Struts+hibernate学习
- bzoj2656 数列 高精度&递推
- 【BZOJ1500】[NOI2005]维修数列
- WAMP环境下配置虚拟主机
- 数据库事物
- 5.7 copy--简单拷贝和深度拷贝对象
- 【bzoj1030】[JSOI2007]文本生成器
- 71. Reverse Bits
- 5.7 copy--简单拷贝和深度拷贝对象
- tar命令解压、压缩gz/bz2/xz文件
- java8对接口的改变
- Android中消息处理机制-Handler剖析
- APACHE服务器500错误解决方法
- Visualizing and Understanding ConvNet论文心得