C++基础——普通引用
变量名回顾:
变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)
程序中通过变量来申请并命名内存空间
通过变量的名字可以使用内存空间
问题1:对一段连续的内存空间只能取一个别名吗?
1. 引用的概念
a) 在C++中新增加了引用的概念
b) 引用可以看作一个已定义变量的别名
c) 引用的语法:Type& name = var;
d) 引用做函数参数呢?(引用做函数参数声明时不进行初始化)
引用属于C++编译器对C的扩展,不能用C语言的语法去思考它。
普通引用 必须要初始化
#include <iostream> using namespace std; //引用的概念 int main(void) { int a=10; //引用的语法:Type& name = var; int &b=a; //int *const b=&a; b=100; //相当于把a修改成100 //*b=100; printf("b:%d\n",b); printf("a:%d\n",a); a=200; printf("b:%d\n",b); printf("a:%d\n",a); return 0; }
运行结果为
a和b共用一个内存空间。
void myswap01(int a, int b) { int c=0; c=a; a=b; b=c; } void myswap02(int *a, int *b) { int c=0; c=*a; *a=*b; *b=c; } void myswap03(int &a, int &b) { int c=0; c=a; a=b; b=c; } int main(void) { int x=10; int y=20; myswap01(x,y); printf("x:%d\n",x); printf("y:%d\n",y); myswap02(&x,&y); printf("x:%d\n",x); printf("y:%d\n",y); myswap03(x,y); printf("x:%d\n",x); printf("y:%d\n",y); return 0; }
myswap01函数实现不了交换,改变的是形参,只是一份拷贝;
myswap02函数传递的是x,y的地址,改变的还是x,y的本身。故能实现交换;
myswap03函数改变的是x,y的一个别名,实际改变的还是x,y。故能实现交换。
复杂数据类型做函数引用
//复杂数据类型的引用 struct Teacher { char name[64]; int age; }; void printfT(Teacher *pT) { cout<<pT->age<<endl; } //pT是t1的别名,相当于修改了t1 void printfT01(Teacher &pT) { pT.age=33; cout<<pT.age<<endl; } void printfT02(Teacher pT) { cout<<pT.age<<endl; pT.age=40; //只会修改pT变量,不会修改t1变量 } int main(void) { Teacher t1; t1.age=35; printfT(&t1); cout<<t1.age<<endl; printfT01(t1); cout<<t1.age<<endl; printfT02(t1); cout<<t1.age<<endl; cout<<"hello...."<<endl; }
运行结果
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并,获取更多隐藏干货,QQ交流群:859800032 微信公众号:Crystal软件学堂
作者:Liu_Jing bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |