变量名回顾:ios
变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)函数
程序中经过变量来申请并命名内存空间spa
经过变量的名字能够使用内存空间code
问题1:对一段连续的内存空间只能取一个别名吗?blog
1. 引用的概念内存
a) 在C++中新增长了引用的概念编译器
b) 引用能够看做一个已定义变量的别名io
c) 引用的语法:Type& name = var;编译
d) 引用作函数参数呢?(引用作函数参数声明时不进行初始化) class
引用属于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; }
运行结果