Maison >développement back-end >C++ >Les références peuvent-elles être réaffectées en C ?

Les références peuvent-elles être réaffectées en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 20:03:11921parcourir

Can References Be Reassigned in C  ?

Comprendre la réaffectation des références en C

En C, il est communément indiqué que les références nécessitent une initialisation lors de la déclaration et ne peuvent pas être réaffectées. Cependant, une expérience récente a soulevé des doutes sur cette notion. Examinons le comportement de la réaffectation de référence dans le programme suivant :

#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;
}

Le programme attribue la référence ri à la variable entière i, faisant de ri un alias pour i. Initialement, ri pointe vers la valeur 5. Lorsque i est modifié à 10, ri reflète correctement ce changement. Cependant, le point critique est la déclaration suivante : ri = j.

N'est-ce pas une réaffectation de la référence ?

La réponse, étonnamment, est non. ri est toujours une référence à i. Pour le démontrer, vous pouvez comparer les adresses de ri et i : elles sont identiques. Ce que vous observez n'est pas une réaffectation de la référence mais plutôt une modification de la valeur stockée à l'emplacement mémoire pointé par ri.

En termes plus simples, ri = j est équivalent à *(&ri) = j , où &ri récupère l'adresse mémoire de ri et * la déréférence pour accéder à la valeur.

A titre de comparaison, si vous créez un const int &cri = i, cela empêchera toute réaffectation à cri, renforçant sa nature constante.

En résumé, bien que les références ne puissent pas être réaffectées à de nouvelles variables en C , elles peuvent être utilisées pour modifier la valeur de l'objet qu'elles référencent, comme on le voit dans notre programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn