вопрос относительно указателя на языке c - PullRequest
4 голосов
/ 03 июня 2010
char *sample = "String Value";

&sample - указатель на указатель "String Value"

верно ли приведенное выше утверждение?

Если приведенное выше утверждение верно, что эквивалентно &sample, если мое заявление

char sample[] = "String Value"

Ответы [ 5 ]

6 голосов
/ 03 июня 2010

В первом из них создается два объекта.

Один - это char * (указатель на символ) с именем sample, а другой - безымянный массив из 13 символов, содержащий символы строки. В этом случае &sample дает адрес объекта sample, который является адресом указателя на символ - то есть указатель на указатель на символ.

Во втором примере создается только один объект; массив из 13 символов с именем sample, инициализированный символами строки. В этом случае &sample дает адрес объекта sample, то есть указатель на массив из 13 символов.

Во втором примере не существует «эквивалента» &sample в первом примере в смысле значения указатель на указатель на символ. Это связано с тем, что в нет значения указателя на символ, из которого можно получить адрес. Есть только массив.

0 голосов
/ 27 мая 2014

В первой части & sample вернет адрес созданного указателя 'sample', а во втором случае начальный адрес строки, созданной как объект.

0 голосов
/ 03 июня 2010

Несмотря на то, что указатели предоставляют программистам огромную мощность и гибкость, они могут использовать вызывающие производства, если они не обрабатываются должным образом. Примите во внимание следующие меры предосторожности с использованием указателей для предотвращения ошибок. Мы должны убедиться, что мы знаем, куда указывает каждый указатель в программе. Вот некоторые общие замечания и распространенные ошибки, которые могут быть полезны для запоминания. *ptr++, *p[],(ptr).member

0 голосов
/ 03 июня 2010

В C массивы и указатели более или менее взаимозаменяемы. Вы можете трактовать имя массива как указатель, а указатель как имя массива.

Если вы берете адрес (&) указателя, конечно, вы получаете указатель на указатель.

0 голосов
/ 03 июня 2010

& sample - адрес указателя, который указывает на «String Value».

Для второго примера, поскольку имя массива, за которым не следует индекс, интерпретируется как указатель на начальный элемент массива, что означает

sample

и

&sample[0]

одинаковы, поэтому & sample также является адресом указателя, который указывает на строку.

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