Что означает это обозначение в C? - PullRequest
4 голосов
/ 11 октября 2009
int *w;
int **d;

d = &w;

Что конкретно хранит ** d?

Ответы [ 5 ]

5 голосов
/ 11 октября 2009

После назначения **d совпадает с *w. d - указатель на указатель на целое число; указатель на целое число, на которое он указывает, равен w. Так что *d равно w, а **d равно *w.

3 голосов
/ 11 октября 2009

w хранит адрес int. d хранит адрес указателя на int (за исключением того, что в этом случае он хранит случайное значение, потому что ему не присваивается), в этом случае адрес d.

3 голосов
/ 11 октября 2009

Значение ** d совпадает со значением * w; * d равно значению указателя, сохраненному в w; поскольку d - указатель на указатель на int, вам нужно дважды разыменовать его, чтобы получить фактическое значение.

3 голосов
/ 11 октября 2009

int ** представляет «указатель на указатель на int» (также известный как двойной указатель).

Теперь int *w просто представляет указатель на int, поэтому присваивание d = &w говорит: «присвойте адрес w (который сам по себе является указателем / адресом) d».

0 голосов
/ 04 декабря 2009

** d - указатель на указатель на int, поэтому ** d будет иметь адрес указателя * w, когда вы говорите, что d = & w, но если вы не сказали, что d = & w, и просто указали int * w int ** d, это не будет иметь никакого значения, кроме: int * w - указатель на int, а int ** d - указатель на указатель на int, но он никоим образом не указал бы, что d будет хранить адреса w.

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