/*
引用的基本概念
变量名回顾
变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)
程序中通过变量来申请并命名内存空间
通过变量的名字可以使用存储空间
问题1:对一段连续的内存空间只能取一个别名吗? 可以的
a) 在C++中新增加了引用的概念
b) 引用可以看作一个已定义变量的别名
c) 引用的语法:Type& name = var;
d) 引用做函数参数那?(引用作为函数参数声明时不进行初始化)
属于C++编译器对C的扩展,不能用c语言的语法去思考它
*/
//值传递
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;
}
//使用引用 a就是x的别名 b就是y的别名
void myswap03(int &a, int &b)
{
int c = 0;
c = a;
a = b;
b = c;
}
void test()
{
int a = 10;
//引用的语法 Type &name = var;
int &b = a;
//int &c; //普通引用 必须要初始化
b = 100; //相当于把a修改成100
int x = 100, y = 20;
printf("a= %d\n", a);
myswap01(x, y);
printf("x = %d , y = %d\n", x, y);
myswap02(&x, &y);
printf("x = %d , y = %d\n", x, y);
//
myswap03(x, y);
printf("x = %d , y = %d\n", x, y);
}
#if 1
struct Teacher
{
char name[64];
int age;
};
void printfT1(Teacher *t)
{
cout << t->age << endl;
t->age = 11;
}
void printfT2(Teacher &t)
{
cout << t.age << endl;
t.age = 22;
}
void printfT3(Teacher t)
{
cout << t.age << endl;
t.age = 33;
}
void test()
{
Teacher t1;
t1.age = 100;
printfT1(&t1);
cout << "t1.age = " << t1.age << endl;
printfT2(t1);
cout << "t1.age = " << t1.age << endl;
printfT3(t1);
cout << "t1.age = " << t1.age << endl;
}
#endif