Я путаю оператор ссылки и ссылки, оператор разыменования и указатель - PullRequest
0 голосов
/ 03 мая 2018

Как я знаю, & называется «оператор ссылки», что означает «адрес». Таким образом, его роль заключается в сохранении адреса в любой переменной. Например, «a = & b;». Но я знаю другое значение, которое называется «ссылки». Как вы знаете, ссылки это псевдоним переменной. Таким образом, в моем результате & имеет два значения в зависимости от позиции. Если «a = & b;», & означает «адрес b». Если «int & a = b;», & означает «псевдоним другой переменной».

Как я знаю, * называется «оператор разыменования». Но это как &, оно имеет два значения в соответствии с положением. Если 'int * a = & b', * означает 'переменная указателя'. Если «a = * b», * означает «переменная разыменования».

Они правы ????

P.S. Я иностранец. Так что я плохо знаю английский. Извините ... мой плохой английский.

1 Ответ

0 голосов
/ 03 мая 2018

Привет, насколько я понимаю, у вас путаница с понятиями указателей и ссылок. Позвольте мне попробовать и разбить это для вас:

Когда мы используем любой из них в объявлении переменной, представьте, что он указывает тип данных этой переменной.

Например, int *a; создает переменную-указатель 'a', которая может содержать адрес (другими словами, указать) другой целочисленной переменной.

Аналогичным образом int & a = b; создает ссылочную переменную 'a', которая ссылается на b (другими словами, 'a' - это просто псевдоним к целому числу b).

Теперь может показаться, что они одинаковы, в действительности они оба выполняют одинаковую функциональность, но есть некоторые различия:

Указателю выделена память для хранения адреса другой переменной, на которую он указывает, тогда как ссылки на самом деле не хранят адрес переменной, на которую они ссылаются.

Другое отличие состоит в том, что указатель не нужно инициализировать при его объявлении, но ссылка должна быть инициализирована при объявлении, в противном случае он выдает ошибку. то есть; int * a; в порядке, тогда как int & a; выдает ошибку.

Теперь для операторов, попробуйте и посмотрите, как они вообще не связаны с указателями или ссылками (хотя именно там мы используем их чаще всего).

Оператор ссылки (&) просто возвращает адрес своей переменной-операнда. В то время как оператор разыменования (*) просто предполагает, что значением его аргумента является адрес, и возвращает значение, хранящееся по этому адресу.

Надеюсь, это помогло вам. Вот несколько полезных ссылок (без каламбура):

https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp4_PointerReference.html

Как выглядит ссылка на C ++ с точки зрения памяти?

...