引用 reference

文章详细介绍了C++中的引用特性,包括引用作为变量的别名,其初始化必须在声明时完成,且一旦引用被绑定到一个对象后,不能改变引用的对象。引用可以改变所引用变量的值,但不能重新引用其他变量。此外,还提到了常引用和指针与引用的交互,如指针可以指向引用,但不能改变引用的值。
摘要由CSDN通过智能技术生成

1. 引用的概念

引用与指针非常相似,但是弱化了程序员对内存的控制,引用已经被其它的面向对象编程语言大量使用,这些编程语言都删除了指针。C++同时支持指针与引用。

引用使用&来表示一个变量的“别名”,对引用进行操作与直接操作变量完全一样。

#include <iostream>

using namespace std;


int main()
{
    int a = 100;
    // b是a的引用
    int& b = a;
    cout << "地址:" << &a << " " << &b << endl; // 0x61fe88 0x61fe88
    b++;
    cout << a << endl; // 101

    return 0;
}

2.  引用的性质

  • 可以改变引用的变量的值,但是不能再次成为其它变量的引用

#include <iostream>

using namespace std;


int main()
{
    int a = 100;
    // b是a的引用
    int& b = a;
    int c = 200;
    b = c; // b不会成为c的引用,只是完成了赋值
    cout << &a << " " << &b << " " << &c << endl; // 0x61fe78 0x61fe78 0x61fe74
    cout << a << " " << b << " " << c << endl; // 200 200 200

//    &b = c;   错误
//    int& b = c; 错误

    return 0;
}

  • 声明引用时,必须同时对其进行初始化。

#include <iostream>

using namespace std;


int main()
{
    int a = 100;
//    int& b; 错误
    int& b = a;

    return 0;
}

  • 声明引用时,初始化的值不能是NULL

#include <iostream>

using namespace std;


int main()
{
//    int& b = NULL; 错误

    return 0;
}

  • 声明引用时,初始化的值可以使纯数值,但是此时需要使用const关键字修饰引用,表示引用的值不可变,也称为“常引用”。

#include <iostream>

using namespace std;


int main()
{
//    int& b = 200; 错误
    // b是常引用
    const int& b = 200;
//    b++;  错误
    cout << b << endl;

    return 0;
}

  • 可以将变量引用的地址赋值给一个指针,此时指针指向的还是原来的变量。

#include <iostream>

using namespace std;


int main()
{
    int a = 10;
    int& b = a;
    int* c = &b; // c指向b,b是a的引用,相当于c指向了a
    cout << *c << endl; // 10

    return 0;
}

  • 可以建立指针的引用

#include <iostream>

using namespace std;


int main()
{
    int a = 10;
    int* b = &a; // b指向了a
    int*& c = b; // c是b的别名
    cout << c << " " << b << endl; // 0x61fe88 0x61fe88
    cout << *c << " " << *b << endl; // 10 10

    return 0;
}

  • 可以用const修饰引用,此时不允许改变引用的值,但是可以改变原变量的值。

#include <iostream>

using namespace std;


int main()
{
    int a = 10;
    const int& b = a; // b是a的常引用
//    b++; 错误
    a++;
    cout << a << " " << b << endl; // 11 11

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值