C ++ Почему ссылочные значения изменяют предыдущие значения? - PullRequest
0 голосов
/ 08 апреля 2020

Может ли кто-нибудь помочь мне обернуть голову вокруг этого? Я думал, что результат будет 20 10 20 (для того, что ref1, num1, num2). Почему он выводит 20 20 20? изменение ref1 также меняет номер1? Контрольные значения - это новая концепция для меня, поэтому я извиняюсь, если это глупый вопрос. Я знаю, что вы, ребята, очень предпочитаете значения указателей, но в классе это то, о чем мы узнаем, поэтому я хочу получить их. Спасибо!

#include <iostream>

int main()
{
int num1 = 10;
int num2 = 20;
int &ref1 = num1;

ref1 = num2;

std::cout << "Ref1: " << ref1 << std::endl
          << "Num1: " << num1 << std::endl
          << "Num2: " << num2 << std::endl;
}

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

вы можете понимать это как ссылочной переменной является псевдоним , то есть просто другое имя для существующей переменной, таким образом, ref1 другое имя num1, когда вы выполняете ref1 = num2, ref1 назначается со значением num2, т.е. 20 и аналогично num1 получить назначение со значением 20

1 голос
/ 08 апреля 2020

Почему выводится 20 20 20

ref1 - это ссылка на num1 , поэтому при назначении ref1 с num2 фактически вы назначаете num1 на num2 , такова цель ссылок

, так что это похоже на то, что вы делаете

int * ref1 = &num1;

*ref1 = num2;

как узнать их значения / адреса памяти

ref1 на правой стороне (случай в printf ) дает значение num1 , чтобы иметь адрес ссылочного элемента, а не его значение, как обычно, используя & , поэтому & ref1 values ​​ & num1 . Обратите внимание, что вы не можете переназначить ссылку, вы можете только инициализировать их

...