В чем разница между int & r = x и r = y в C ++? [Дубликат]

0
#import<iostream>
using namespace std;
int main()
{
    //trying to test pointers & reference
    int x = 5;
    int y = 6;
    int *p;
    p = &y;
    *p = 10;
    int &r = x;
    cout<<"X reference\n"<<&r<<"\n"<<"value:"<<r<<"\n";
    r=y;
    cout<<"Y reference\n"<<&r<<"\n"<<"value:"<<r<<"\n";
}

В этом коде я сначала назначил & r для x, а затем назначил r на y.

  1. В чем разница между присваиванием & r = x и r = y? Пожалуйста, помогите мне.
  • 0
    Вы не можете переустановить ссылки. В этом разница. И почему в вашем коде есть import ?
  • 0
    Попробуйте также распечатать x и y в конце программы.
Показать ещё 2 комментария
Теги:
reference

2 ответа

4
Лучший ответ

int &r = x;

определяет ссылку на переменную int.

Ссылки не могут изменить то, что они ссылаются после того, как они определены, поэтому строка

r=y;

присваивает x значение, которое хранится в y. Это не означает, что r начнет ссылаться на y. Любое присвоение или из r будет обрабатываться так, как если бы оно было от x.

Другой способ думать о ссылках - это как бы указательная переменная, которую вы не можете изменить, на что указывает, после того как она инициализирована, и любое появление их использования имеет неявный оператор разыменования (*).

0

int& r = x объявляет ссылку на x, думает об этом как псевдоним. Поэтому, если вы дальше по строке измените x, оно будет отражено в r, например,

x = 10;
cout << r; // r is "updated" here, as it is a reference to 'x'

напечатает 10.

С другой стороны, декларация int r = x просто копирует значение x в r, то r полностью не зависит от x. Таким образом, модификация x будет иметь абсолютно никакого эффекта на r.

В некотором смысле ссылка - это "вид" синтаксического сахара для указателей, хотя на самом деле это не то же самое, поскольку вы не можете иметь неинициализированную ссылку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню