2012-05-02 3 views
1

, когда я "Print" SizeOf (собака) дляПочему это не одно и то же: char dog [1000]; и char * dog = (char *) malloc (1000 * sizeof (char));

char dog[1000];// i get size of 1000 
char *dog = (char*)malloc(1000 * sizeof(char));// i get size of 8 ? why? 

ТНХ

+0

Потому что первое выделено в стеке, а последнее выделено в куче и на которое ссылается указатель. –

ответ

4

Первых переменный имеет тип char[1000], который представляет собой массив из 1000 символов.

Вторая переменная имеет тип char *, который является указателем. На вашей системе кажется, что указатели имеют размер 8 (вероятно, потому, что у вас есть 64-битные указатели).

+0

, но не является «собакой» на первом, а также указателем (не является «указателем char»?), Но на стеке, как показано на втором в куче? – jdl

+0

@jdl: Нет. является массивом. –

+0

Массивы деградируют до указателей, поэтому их можно использовать почти так же, как указатели. Однако 'sizeof()' на массивах дает размер всего массива. –

1

Потому что char *dog - это всего лишь один указатель, тогда как char dog[1000] массив символов.

Важным моментом является то, что определено значение sizeofdog[1000] известно во время компиляции, тогда как динамическая матрица (char *dog) неизвестна.

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