首页 >后端开发 >C++ >C 中的引用可以重新分配吗?

C 中的引用可以重新分配吗?

Patricia Arquette
Patricia Arquette原创
2024-12-05 20:03:11921浏览

Can References Be Reassigned in C  ?

理解 C 中的引用重新分配

在 C 中,通常指出引用需要在声明时初始化,并且不能重新分配。然而,最近的一项实验对这一概念提出了质疑。让我们研究一下以下程序中引用重新分配的行为:

#include <iostream>
#include <stdio.h>
#include <conio.h>

using namespace std;

int main()
{
    int i = 5, j = 9;

    int &ri = i;
    cout << "ri is : " << ri << "\n";

    i = 10;
    cout << "ri is : " << ri << "\n";

    ri = j; // *** Reassignment at Issue ***
    cout << "ri is : " << ri << "\n";

    getch();
    return 0;
}

程序将引用 ri 分配给整型变量 i,使 ri 成为 i 的别名。最初,ri 指向值 5。当 i 修改为 10 时,ri 正确反映了这一变化。然而,关键点是下一个语句:ri = j。

这不是引用的重新分配吗?

令人惊讶的是,答案是。 ri 仍然是对 i 的引用。为了证明这一点,您可以比较 ri 和 i 的地址:它们是相同的。您观察到的不是引用的重新分配,而是对 ri 指向的内存位置存储的值的修改。

简单来说,ri = j 相当于 *(&ri) = j ,其中 &ri 检索 ri 的内存地址,并 * 取消引用它以访问该值。

作为比较,如果您创建 const int &cri = i,它将阻止任何重新分配给 cri,强制其不变的性质。

总之,虽然引用不能重新分配给 C 中的新变量,但它们可以用于修改它们引用的对象的值,如我们的程序中所示。

以上是C 中的引用可以重新分配吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn