Указатель C ++, Вопрос для начинающих - PullRequest
3 голосов
/ 30 марта 2010

просто хочу задать вопрос начинающему ...

здесь я сделал некоторый код для понимания концепции / основы указателя:

int a=1;
int *b=&a;
int **c = &b;
int ***d = &c;

cout << &*(&*d) << endl;

может кто-нибудь объяснить мне, почему &*(&*d) адрес возврата "c" вместо адреса "b"? Я также пробовал код, подобный &*(&*(&*(&*(&*d)))), но он сохраняет адрес возврата "c"

Большое спасибо:)

Ответы [ 5 ]

4 голосов
/ 30 марта 2010

Потому что &* отменяет друг друга. * разыменование d, которое дает значение c. И тогда & дает адрес c или значение d.

3 голосов
/ 30 марта 2010

& и * отменяют друг друга. Если вы хотите разыменовать указатель, вам просто нужно *. Итак, попробуйте **d.

1 голос
/ 30 марта 2010

Простое правило: используйте * для доступа / предоставления значения, используйте & для доступа / предоставления адреса.

0 голосов
/ 30 марта 2010

Если x является переменной, то &*x не совсем равно x. Первый - это значение, а второй - это значение. *&x с другой стороны всегда совпадает с x, потому что оба выражения являются lvalues.

0 голосов
/ 30 марта 2010

* разыменовывает указатель и дает вам содержимое того места, на которое он указывает. & в основном addressof.

При использовании в одной и той же точке они отменяют друг друга, &*d эквивалентно d если вы хотите напечатать адрес c, вам потребуется *d, для b вам потребуется **d, а для данных в a вам потребуется ***d.

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