09_引用的基本概念(c++中的语法)

/*
    引用的基本概念
    变量名回顾
    变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)
    程序中通过变量来申请并命名内存空间
    通过变量的名字可以使用存储空间
    问题1:对一段连续的内存空间只能取一个别名吗? 可以的

    a)  在C++中新增加了引用的概念
    b)  引用可以看作一个已定义变量的别名
    c)  引用的语法:Type& name = var;
    d) 引用做函数参数那?(引用作为函数参数声明时不进行初始化)

    属于C++编译器对C的扩展,不能用c语言的语法去思考它
*/
#if 0
//值传递
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);
}
#endif
//复杂数据类型的引用
#if 1
struct Teacher
{
    char name[64];
    int age;
};

//指针
void printfT1(Teacher *t)
{
    cout << t->age << endl;
    t->age = 11;
}

//引用 t是t1的别名 ,相当于修改了t1
void printfT2(Teacher &t)
{
    cout << t.age << endl;
    t.age = 22;
}

void printfT3(Teacher t)
{
    cout << t.age << endl;
    t.age = 33;//只会修改t变量 ,不会修改t1变量
}
void test()
{
    Teacher t1;
    t1.age = 100;
    printfT1(&t1);
    cout << "t1.age = " << t1.age << endl;
    printfT2(t1);//t是t1的别名
    cout << "t1.age = " << t1.age << endl;
    printfT3(t1);// t是形参 ,t1 copy一份数据 给t     //---> t = t1
    cout << "t1.age = " << t1.age << endl;
}
#endif

猜你喜欢

转载自blog.csdn.net/WUZHU2017/article/details/81174085