2012-05-12 4 views
2

Я знаю некоторую разницу между char * и char []. char x[] = "xxxx" Является массивом символов; char *y = "xxxx" - указатель на строку литерала (const); И x[4]=='\0', и *(y+4) == '\0' тоже. Итак, почему sizeof(x)==5 и sizeof(y)==4?Разница в размере между char * x и char x []

+2

определить х как char x [] = "xxxxxxxx". TH задайте себе тот же вопрос ... Подсказка: завершение '\ 0' –

+1

@MitchWheat Я думаю, он понимает, что x имеет пять символов. Проблема в том, что y является указателем, поэтому sizeof (y) = 4 (байты). – mgiuffrida

+0

@eli: Да, я это знаю. Но я не хотел давать прямой ответ. Научите человека ловить рыбу и все это .... –

ответ

4

Размер массива - это размер, который занимает массив. То же, что и sizeof("xxxx").

Размер указателя - это размер, который сам указатель занимает. То же, что и sizeof(char*).

8

char x[] = "xxxx" - это массив размером 5, содержащий x x x x и \ 0.

char *y = "xxxx" - указатель на строку. Это длина 4 байта, потому что это длина указателя, а не строка.

4

x действительно "xxxx\0". Терминатор nul в конце строки дает массив пять байтов.

Однако sizeof(y) запрашивает размер указателя, который, как оказалось, составляет четыре байта в вашем случае. То, что указывает y, не имеет значения для sizeof().

0

Для char *x, х является указателем, который означает, что вы можете изменить указываемую позицию по x++, x+=2 и т.д. char x[] представляет собой массив, который является постоянным указателем, так что вы не можете сделать х ++

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