Каков результат & указатель в C? - PullRequest
4 голосов
/ 24 декабря 2009

Каков результат следующей строки:

int* ptr;
printf("%x, %x\n", ptr, &ptr);

Я знаю, что ptr - это адрес в памяти, но что такое &ptr?

Ответы [ 7 ]

25 голосов
/ 24 декабря 2009

& ptr будет адресом ячейки памяти, в которой содержится ptr. По сути, это указатель на указатель.

7 голосов
/ 24 декабря 2009

Это адрес ячейки памяти, который содержит адрес исходной ячейки памяти (то есть это «указатель на указатель»).

6 голосов
/ 24 декабря 2009

ptr - это не просто «адрес в памяти». ptr - это lvalue , объект в памяти, который содержит адрес. Каждый объект в памяти имеет свой собственный адрес, независимо от того, что он содержит.

Поскольку ptr является объектом в памяти, он также имеет свой собственный адрес. Этот адрес именно то, что вы получаете, когда делаете &ptr.

6 голосов
/ 24 декабря 2009

&ptr возвращает адрес переменной-указателя ... указатель на указатель, если хотите.

Это часто используется, чтобы позволить функции изменить место, куда на самом деле указывает указатель.

1 голос
/ 24 декабря 2009

В C указатели - это просто контейнеры хранения, которые содержат адрес некоторого другого фрагмента данных. В этом случае ptr содержит адрес некоторого int и сам по себе является просто частью данных в памяти. Так & ptr - это адрес переменной, которая содержит адрес некоторого целого.

1 голос
/ 24 декабря 2009

указатель - это просто ссылка на расположение некоторых данных в памяти. * Указатель дает вам значение, хранящееся в этой ячейке памяти. Оператор & возвращает фактический адрес памяти, который в данном случае является указателем.

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

& ptr может храниться только в int **var или переменной двойного указателя, поэтому & ptr - это не что иное, как адрес ptr, содержащий другой адрес.

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