/*
引用的基本概念
变量名回顾
变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)
程序中通过变量来申请并命名内存空间
通过变量的名字可以使用存储空间
问题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