C++基础——普通引用

变量名回顾:

 变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)

 程序中通过变量来申请并命名内存空间

 通过变量的名字可以使用内存空间

问题1:对一段连续的内存空间只能取一个别名吗?

 

1. 引用的概念

a)  在C++中新增加了引用的概念

b)  引用可以看作一个已定义变量的别名

c)   引用的语法:Type& name = var;

d)  引用做函数参数呢?(引用做函数参数声明时不进行初始化) 

引用属于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;
}

运行结果

 

posted @ 2018-09-09 20:09  Liu_Jing  Views(204)  Comments(0Edit  收藏  举报