C++引用与指针
来源:互联网 发布:术大师淘宝论坛 编辑:程序博客网 时间:2024/05/21 00:18
C++一开始接触到的就是引用这个概念。初次接触,对引用现在有了一定的了解。
引用(reference):某一变量的别名。
我们现在所了解到的引用主要是左值引用,除此之外还有右值引用。借此机会,我也了解了一下左值与右值的区别。
左值:必须在内存中存在实体(++a是左值引用)
右值:存放在寄存器、cpu中(a++是右值引用)
区分二者最简单的方法就是看能否取地址,左值可以取地址而右值不可以。
int a = 10;int &ra = a;
上面的代码块便是引用的格式:类型 &引用变量名=已定义过的变量名;
ra便是a的引用,也就是说,ra是a的别名,两者的作用相同。
对a进行操作与对ra进行操作结果完全相同。二者具有相同的地址。
引用的注意事项:
1.一个变量可以取多个别名
2.引用必须初始化且只能初始化一次,不能再改为其他变量的引用
3.加上const的引用更加安全
4.可以把引用绑定到const对象上,称作对常量的引用,但是不能通过对常量的引用来修改它所绑定的对象。
5.不能建立void类型的引用
6.可以用常量或者表达式对引用进行初始化,但必须是const引用
7.包含隐式类型转换
float d = 12.34;int &rd = d;//d是double类型,rd是int类型,d赋给rd时会产生一个临时变量,也就是说rd会引用这个具有常性的临时变量,所以不能赋值。
数组的引用
int a[10] = { 0 };int(&ra)[10] = a;
二维数组
int a[3][4] = { 0 };int(&ra)[3][4] = a;
引用作为函数参数
例如:交换两个整形常量
void swap(int &a,int &b){ int tmp = a ; int a = b; int b = tmp;}int main(){ int a = 10; int b = 20; swap(a, b); return 0;}
若采用传值调用,占用空间大还无法交换二者的值。
若采用传址调用,指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不需要单独占内存单元,它是实参的别名。
引用调用的效率比以上二者的效率都要高。
若不希望函数调用过程中改变实参的值,可在引用前加const限定。
引用作为返回值
int &Add(const int & a, const int & b){ int ret = 0; ret = a + b ; return ret;}
ret是个临时变量,函数结束便销毁了,此处函数返回一个临时变量,必然会出错。
要返回一个出了函数作用于的对象的引用。
指针和引用的区别
1.引用只能在定义时初始化一次 ,之后再不能与其他变量绑定。指针变量的值可变。
2.引用必须指向有效的变量,而指针可以为空。
3.sizeof在求取指针对象和引用对象的值不同,sizeof引用得到的是所引用对象的大小,sizeof指针得到的是对象的地址大小。
4.引用时(++)和(–)相当于给变量自增自减,给指针进行自增自减则会改变指针的指向。
5.相对而言引用比指针更加安全。
右值引用
int num = 20;int *&&rpnum = #
此处&num就是右值。因为右值是在寄存器上的,如果我们要把他拿出来,需要进行拷贝,早期的c++采用的就是在内存开辟一块空间进行拷贝,然后进行操作,但是这样的话太浪费空间与时间。
右值引用很好的节省了空间与时间。
- 【c++】指针与引用
- 【C++】指针与引用
- C++【引用与指针】
- 指针与引用c
- 【C++】指针与引用
- c中指针与引用
- 指针与引用(C++)
- C/C++引用与指针
- 【C/C++】指针与引用的区别
- C与C++之引用与指针
- 【C++与C差异】引用与指针
- 指针与引用的区别 (MoreEffictive C++)
- java引用与C指针的异同
- C/C++ 指针与引用的区别
- 【C++】指针与引用的区别
- c,c++易错点之指针与引用
- C引用与指针的比较
- 引用 与 指针的区别 -- C
- EasyDarwin云平台部署实践
- js 各种高宽问题,浏览器高宽问题
- The Linux Programming Interface 09 Process Credentials 进程凭证
- AsyncTask简单使用
- Cesium原理篇:3D Tiles(1)渲染调度
- C++引用与指针
- Android Studio中四个常用的开发插件
- jQuery 动画
- Android局部动态高斯模糊以及侧滑菜单配合高斯模糊
- C#模拟IIS服务器(一)
- C. Dima and Salad
- JSP标签
- Hibernate中使用Criteria查询及注解——(Emp.java)
- jQuery 停止动画