ホームページ >バックエンド開発 >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 を作成すると、

要約すると、プログラムで見られるように、参照を C の新しい変数に再代入することはできませんが、参照するオブジェクトの値を変更するために使用できます。

以上がC で参照を再割り当てできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。