Разница между операторами классов - PullRequest
0 голосов
/ 08 апреля 2011

Я немного читаю на C ++, и мне было интересно, может ли кто-нибудь объяснить мне некоторые различия некоторых операторов класса.Рассматриваемые операторы:

* & . ->

Я понимаю некоторые из них, однако я не вижу разницы между некоторыми.Например:

*x
&x
x.y
(*x).y
x -> y

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

Ответы [ 5 ]

6 голосов
/ 08 апреля 2011

Возьмите эту небольшую структуру, как указано для моих образцов:

struct MyStruct {
   int y;
};

*x разыменовывает указатель x. Возвращаемое значение является ссылкой на объект, на который указывает x:

MyStruct* x = ...;
MyStruct xval = *x;
// or
MyStruct& xref = *x;
// read up on references to understand the latter

&x принимает адрес x. Поэтому результатом является указатель на x.

MyStruct x;
MyStruct* pointer_to_x = &x;

x.y обращается к члену с именем y в объекте x.

MyStruct x;
x.y = 5;
int a = x.y + 2;
// a==7

(*x).y является комбинацией первого и третьего: указатель разыменовывается, а оператор . используется для доступа к элементу объекта, на который он указывает.

a = (*pointer_to_x).y;

x->y является (если не отменено злыми людьми) ярлыком для (*x).y.

a = pointer_to_x->y;
3 голосов
/ 08 апреля 2011

*x - оператор разыменования, если у вас есть memoryAddress, тогда *memoryAddress - соответствующий объект.

Обратное, &x является оператором ссылки, если у вас есть object, тогда &object предоставляет адрес памяти.

Для переменных доступа x->y - это, по сути, сокращение (*x).y, то есть разыменование и последующий доступ к члену.

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

Продолжайте читать!Я вкратце расскажу о паре, но это может не иметь смысла, пока вы действительно не поймете некоторые из базовых концепций.

* x - оператор разыменования.Это означает, что он обрабатывает 'x' как адрес памяти, и ищет то, что находится в этой ячейке памяти, и возвращает это значение.Поэтому, если x = 100, * x ищет то, что находится в адресе памяти 100, и возвращает значение в этой ячейке памяти.

& x возвращает адрес, в котором хранится переменная x. Представьте себе снова, если x = 100,но значение 100 сохраняется по адресу 50. & x вернет 50, x вернет 100, а * x вернет значение, сохраненное в адресе памяти 100.

Другие требуют чуть большего объяснения, но также и немногобольше понимания классов и структур.Я предлагаю вам продолжить читать и делать больше примеров, поскольку это, вероятно, поможет больше, чем многословное объяснение сейчас.

1 голос
/ 08 апреля 2011
  • & получает адрес памяти объекта
  • * получает объект, на который указывает адрес памяти
  • . обращается к члену объекта
  • -> обращается к члену из указателя на объект
1 голос
/ 08 апреля 2011

*x является оператором dereference.То есть он обратен оператору & - он получает значение памяти, на которое указывает указатель.

& - это оператор, который возвращает адрес памяти переменной.

x.y означает доступ к члену y из x

x -> y является синонимом (*x).y

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...