//引用 #include<iostream> using namespace std; struct Student{ char name[30]; int age; }; struct Teacher{ int &at2; int &bt2; }; int GetNum(Student &s2){ s2.age = 19; return s2.age; } void main(){ int a = 10;//编译器分配4个字节的内存,变量名a就是内存空间的的标识 //引用概念 //在C++中新增加了引用的概念,C语言中没有引用的概念 //引用可以看作一个已定义变量的别名 //引用的语法:Type& name = var; //引用做函数参数那?(引用作为函数参数声明时不进行初始化) //int &b1; //报错 error C2530: “b1”: 必须初始化引用 //说明:引用定义的时候必须赋初始值 int &b = a;//b是a的别名 变量b也是a对应内存空间的标识 //a的三种赋值方式 a = 11;//①直接赋值 printf("a=%d ",a); { //②间接赋值 int *p = &a; *p = 12; printf("a=%d ", a); } //③引用赋值 b = 13; printf("a=%d ", a); //结构体引用 Student s1; s1.age = 12; //定义s1的引用 Student &s2 = s1; s2.age = 17; //直接引用 printf("直接引用--学生的年龄是%d ", s1.age); //间接引用 printf("间接引用--学生的年龄是%d ", GetNum(s1)); //引用的本质 printf("结构体Teacher的大小是%d ", sizeof(Teacher));//打印8 //说明 int &bt2; 占据4个字节大小的内存空间 //引用的本质 //1)引用在C++中的内部实现是一个常指针 //Type& name <--> Type* const name //2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。 //3)从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏 system("pause"); }