ссылки и адрес (ячейка памяти) переменной - PullRequest
0 голосов
/ 14 января 2011

Может кто-нибудь объяснить, почему вывод приведенного ниже фрагмента кода 20?

int i = 10;
cout << i << endl;

int &r = i;
r = 20;
cout << i << endl;

Сначала переменная i хранит целочисленное значение 10 Затем отображается 10. Тогда адрес r (ячейка памяти r) устанавливается равным i, что составляет 10 А затем r становится 20 Но почему i также меняется на 20?

Изменилось целочисленное содержимое r, а не его адрес (его память).

Спасибо

Ответы [ 3 ]

1 голос
/ 14 января 2011

Переменная r является ссылкой на i, она похожа на указатель, за исключением того, что вместо произнесения * r = 20;вы просто говорите г = 20;и это меняет значение r.

1 голос
/ 14 января 2011

Когда вы делаете ссылку, это почти как указатель, поэтому, когда вы можете изменить r, вы на самом деле изменили то, на что указывал r, что также i.

На самом деле, если быть более точным, ссылка не является указателем илиадрес, это это объект.По крайней мере, в мире C ++.

0 голосов
/ 14 января 2011

Думайте об этом как:

int i = 10;
cout << i << endl;

int *p = &i;
*p = 20;
cout << i << endl;

Это в основном то, что происходит за сценой

...