二、C++引用

一、引用的概念

1.引用可以看作一个已定义变量的别名,C++编译器在编译过程中使用常量指针作为引用的内部实现,因此引用所占的空间大小与指针相同

2.引用的语法:Type& name = var; //等价 Type* const name = &val;

int a =10;
int& p =a;//p是a的引用

等价于C语言中

int a =10;
int* const p =&a;//p是只读的,指向不可改变

注意:

1.&不是地址运算,而是起标识作用

2.类型标识符是指目标变量(a)的类型(int)

3.必须在声明引用变量时进行初始化

int a =10;
int& p;  //错误,必须初始化,如int& p =a;

4.引用初始化后不可改变

int a =10;
int& p =a;
int b=20;
&p = b;//错误 引用初始化后不可改变 没有这种写法

5.不能有NULL引用,必须确保引用是和一块合法的存储单元关联

二、引用的使用

void test()
{
    int a =10;
    //给变量a取个别名b
    int& b=a;
    cout<<a<<endl;  //10
    cout<<b<<endl;  //10
    //操作b就相当于操作a本身
    b =100;
    cout<<a<<endl;  //100
    cout<<b<<endl;  //100
    //一个变量可以有N个别名
    int& c=a;
    c=200;
    cout<<a<<endl;  //200
    cout<<b<<endl;  //200
    cout<<c<<endl;  //200
    //a,b,c的地址都是相同的
    cout<<&a<<endl;
    cout<<&b<<endl;
    cout<<&c<<endl;
}

三、引用作为函数的参数

普通引用在声明时必须用其他的变量进行初始化引用作为函数声明时不进行初始化

typedef struct Teacher
{
    char name[32];
    int age;
}Teacher;

void Prt(Teacher &t)    //等价于void Prt(Teacher* const t)
{
    cout<<t.age<<endl;
    t.age = 32;         //会改变值
}

int main() {
    Teacher  t;
    t.age = 30;
    Prt(t);          //30
    cout<<t.age<<endl;  //32

    return 0;
}

四、引用的意义

1.引用作为其他变量的别名而存在,因此在一些场合可以代替指针

2.引用相对于指针来说具有更好的可读性和使用性

int swap1(int& a,int& b)
{
    int t=a;
    a=b;
    b=t;
    return 0;
}

int swap2(int* a,int* b)
{
    int t=*a;
    *a=*b;
    *b=t;
    return 0;
}
int main() {
    int a =10;
    int b=20;
    swap(a,b);
    cout<<a<<','<<b<<endl;  //20,10
    swap2(&a,&b);
    cout<<a<<','<<b<<endl;  //10,20

    return 0;
}

3.引用在函数形参为对象的引用以及函数返回值为对象的引用上使用非常广泛,需要结合后面学习的类和对象在补充。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值