sizeof (z + 100), для z типа char - PullRequest
       6

sizeof (z + 100), для z типа char

0 голосов
/ 02 декабря 2011

Я проверяю следующий код:

char ch,z=120;
int x=5;
double y=7.5;
printf("\nsize of (z+100): %d" , sizeof(z+100));

Вывод, который я получаю:

size of (z+100): 4

Может кто-нибудь объяснить мне этот результат?Я думал, что вывод должен быть

size of (z+100): 1

Поскольку диапазон char равен 0 ... 255, а 100 = 120 находится в диапазоне ... Спасибо

Ответы [ 4 ]

4 голосов
/ 02 декабря 2011

Выражение z + 100 является дополнением к арифметическим операндам типа char и int (числовой литерал 100 считается целым числом в C).

Правила языка предусматриваютчто результат такого арифметического сложения также имеет тип int и sizeof(int) == 4 (по крайней мере, под вашим текущим компилятором).

1 голос
/ 02 декабря 2011

Выражение sizeof оценивается как значение без знака size_t, равное размеру в байтах типа данных «аргумент», переменной или выражения (с типами данных, sizeof оценивается по размеру типа данных; для переменных ивыражений, которые он оценивает по размеру типа переменной или выражения).

Поскольку у вас есть выражение с char и int, компилятор преобразует char в int по интегралупродвижение, таким образом, sizeof оператор выдаст вам размер типа int, который в вашем случае составляет 4 байта.

0 голосов
/ 02 декабря 2011

Полагаю,

sizeof(z + 100);

приводит к неявному приведению к типу int размером четыре байта.

0 голосов
/ 02 декабря 2011

Кажется, что он конвертирует его в int, что объясняет размер 4, а не 1.

...