2014-02-19 5 views
0

Я пытаюсь понять указатели. когда я объявляюC символы и символ * указатель на указатель

char* buffer = malloc(10); 

&buffer является char**, который имеет смысл, и следует

char new_buf; 

где &new_buf является указателем или char*

Что такое &buffer[5]?

Очевидно, вы можете распечатать его с помощью %s, так это делает его строкой?

+0

Как только вы получите ручку на этом, голова-скребок будет разницей между '& buffer' и просто' buffer'. Подсказка: это вещь типа. – WhozCraig

ответ

1

&buffer является char**

&buffer[0] является char*

&buffer[5] является char*

&new_buf является char*

C на самом деле не имеют строки, только массивы символов. Большинство людей приравнивают char* к строке, и она работает до тех пор, пока они поддерживают соглашение о завершении строки с помощью символа 0.

3

buffer «ы тип char *, поэтому buffer[5] что эквивалентно *(buffer + 5), имеет тип char. Поэтому &buffer[5] - тип char *.

Является ли это строкой, зависит от того, является ли она нулевой. Например, если buffer указывает на строку "hello,you", то &buffer[5] указывает 5 символов после начала buffer, это ",you", строка.

h e l l o , y o u \0 
^  ^
|   | 
buffer &buffer[5] 

Еще более простой способ понять это, buffer эквивалентно &buffer[0], так &buffer[5] является указатель, который указывает 5 символов после него.

0

buffer - адрес первой записи массива из 10 байтов. Это то же самое, что и буфер & [0].

& буфера [5] адрес шестого элемента массива, а на самом деле то же самое, (буфер + 5)

Вы могли бы назвать Е («% S», буфер); или printf ("% s", & буфер [5]); который может сделать что-то разумное, если массив содержит подходящие символы ASCII с нулевым завершающим символом.

0

buffer и &buffer[0] оба одинаковы и указывают на первый символ массива символов.
buffer средства (buffer+0)
buffer[5] средства *(buffer+5).
&buffer[5] средства (buffer+5).

Смежные вопросы