Как правильно инициализировать указатель в c? - PullRequest
6 голосов
/ 26 сентября 2011

В чем разница между следующей инициализацией указателя?

char array_thing[10];

char *char_pointer;

В чем разница следующей инициализации?

1.) char_pointer = array_thing;

2.) char_pointer = &array_thing

Допустима ли вторая инициализация?

Ответы [ 4 ]

5 голосов
/ 26 сентября 2011

Вторая инициализация недопустима. Вам необходимо использовать:

char_pointer = array_thing;

или

char_pointer = &array_thing[0];

&array_thing - указатель на массив (в этом случае введите char (*)[10], и вы ищете указатель на первый элемент массива.

1 голос
/ 26 сентября 2011

См. Comp.lang.c FAQ, вопрос 6.12: http://c -faq.com / aryptr / aryvsadr.html

0 голосов
/ 26 сентября 2011

В первом случае вы устанавливаете char_pointer для первого элемента array_thing (скорее, его адрес). Использование арифметики с указателями приведет вас к другим элементам, как и индексирование. Например

char_pointer[3] = 'c';

совпадает с

char_pointer + = 3; char_pointer = 'c';

Второй пример ... Я не верю, что это так, как вы делаете.

0 голосов
/ 26 сентября 2011

Обратите внимание, что в опубликованном вами коде вообще нет инициализаций. Тем не менее, вы должны иметь в виду, что массивы распадаются на указатели (указатель на первый элемент в массиве). Взятие адреса массива, безусловно, допустимо, но теперь у вас есть (*char)[10] вместо char*.

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