Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C++的引用

C++引用的学习:通常引用第一个作用,人们会想到的是引用的变量的别名;(可以说是直接操作这个变量);引用的声明:Type + & + name(可以认为是一个常指针)注意:(1)&是起标识符的作用; (2)声明引用时,必须先将其进行初始化; (3)不能建立数组的引用,因为数组是因为由若干个元素组成,所以无法建立一个数组的别名;引用的应用:(引用作为参数)int swap(int &a, int &b){int t = a;a = b; b = t;} (引用作为常数)int main(){int b = 100;const int &a = b;return 0;}这可以让代码的健壮性比较强,并且也有其他方面的需求;(引用作为返回值)Type + & + 函数名(1)以引用返回函数值,定义函数时需要在函数名前加&;(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。但函数返回栈变量时,不能成为其他引用的初始值;(因为栈变量会因为函数结束后被释放掉)int &fun(){return a; //这样当局部变量被释放掉的时候,对局部变量的引用会指向一片不知哪里的内存空间}int main(){int &a = fun();}
//这是错误的并且不能成为左值;函数返回静态变量或全局变量:(这两种变量都放在全局区)可以作为其他值的引用,并且可以作为左值和右值;以以上几种情况写一个代码://返回静态变量int &fun1(){static int a = 1;return a;}//返回局部变量int &fun2(){int a = 2;return a;}//参数是引用的int &fun3(int &a){return a;}int main(){int a = fun1();int &b = fun1();cout << "a = " << a << endl;cout << "b = " << b << endl;}
/*运行结果为:
a = 1;
b = 1;
*/ 这是因为参数是全局的;main(){int a = fun2();int &b= fun2();}/* 运行结果为2和-2 (负数代表指向内存不明确)*/因为这是的引用是局部变量当第2个分号结束时就会指向不明确的内存区;main(){
int c = 10;int a = fun3(c);int &b = fun3(c);}/*运行结果为a = 10;b = 10;*/这时的引用是因为内存在程序结束之前不会被释放掉;本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132469.htm