Я учился sizeof
, и это меня спотыкается. Я решил это сделать.C: Почему размер моей пиццы не равен 10 байтам?
#include<stdio.h>
#include<string.h>
int main(){
char *myWord="PIZZA";
printf ("The size of P is...:%d\n",sizeof("P"));
printf ("The size of I is...:%d\n",sizeof("I"));
printf ("The size of Z is...:%d\n",sizeof("Z"));
printf ("The size of A is...:%d\n",sizeof("A"));
printf ("The size of R is...:%d\n",sizeof("R"));
printf ("The size of PIZZA is...:%d\n",sizeof("PIZZA"));
printf ("The size of *PIZZA is..:%d\n",sizeof(myWord));
return 0;
}
И я очень удивился, увидев результат:
The size of P is...:2
The size of I is...:2
The size of Z is...:2
The size of A is...:2
The size of R is...:2
The size of PIZZA is...:6
The size of *PIZZA is..:4
на вопрос, является следующим:
-
Почему размера полукокса массива и указатель полукокса соответственно, 6 байт и 4 байта
-
Как приходят они «cruncuh» 5 букв * 2bytes = 10 байт. в 6 байтов и 4 байта?
Позвольте мне объяснить мой второй вопрос:
Из того, что я знаю, C не хранит письма как это, но хранить письма в ASCII коде.
Это оборудована устройством с помощью этого кода
printf ("ASCII CODE of A:%d",myWord[4]);
результаты:
ASCII CODE of A:65
Так предполагая, что я прав, то С хранит слово, как [80,73,90,65,65]
, так 5 символов * 2 байты равны ..... 10 байт! Но приведенный выше код показывает 6 байтов и 4 байта! Вот что я подразумеваю под crunch в вопросе номер два. C сует 10 байтов на 6 байтов и 4 байта.
Любое просветление ценится =)
'myWord' - указатель, поэтому размер указателя (в вашем случае) равен 4 байтам. Кроме того, каждый символ «char» имеет только 1 байт. Вы видите 2 байта для каждого «символа», потому что они фактически 2-символьные строки (один символ плюс один нуль-терминатор). –
'char' всего 1 байт? Это объясняет. – Realdeo
@Realdeo 'char' определяется как всегда один байт по стандарту C. –