Символьный литерал, такой как 'a'
, будет рассматриваться как целочисленный литерал, такой как 97
или 0x61
. Компиляторы C, как правило, хотят, чтобы каждое целое число сохранялось в int
, если не указано иное, поэтому sizeof('a')
, вероятно, будет sizeof(int)
.
Тем не менее, вы должны заметить, что значение 'a'
меньше 127, поэтому оно может быть сохранено в символе (который имеет максимальное значение 127 или 255 в зависимости от того, подписано оно или нет в вашем компиляторе ). Это то же самое, что иметь возможность:
unsigned long long x = 0;
unsigned int y = x;
y
присваивается из x
, тип которого больше, чем тип y
, но значение x
находится в пределах тех значений, которые может представлять y
, поэтому данные не будут потеряны, когда старшие биты (все 0) обрезаются.