kavinderrana121 Ответов: 3

Печать размера символа в C


когда я печатаю sizeof('b'); в c он печатает 4, но он должен печатать 1 ,потому что b-это не целое число, а символ
но когда я объявляю char b; тогда его значение ascii также будет принимать 4 байта, но тогда его печать 1; или мы можем сказать, что в этом случае значение ascii не будет принимать 4 байта после того, как оно также будет целым числом??

Что я уже пробовал:

#include<stdio.h>
 int main(){
 printf("the size of b is %d",sizeof('b')); 

 }

3 Ответов

Рейтинг:
2

W∴ Balboos, GHB

Проведите эксперимент с вашей текущей установкой.

Объявите байт, символ, короткий int, int.
Теперь запустите sizeof() на них.

Ваша система может иметь символы по умолчанию размером, отличным от одного байта.

из поиска google по запросу "sizeof(char) in c":

Цитата:
Это зависит от того, что такое символ и в какой кодировке он находится: символ ASCII в 8-битной кодировке ASCII составляет 8 бит (1 байт), хотя он может поместиться в 7 бит. Символ ISO-8895-1 в кодировке ISO-8859-1 составляет 8 бит (1 байт). Символ Unicode в кодировке UTF-8 находится между 8 битами (1 байт) и 32 битами (4 байта).31 января 2011 года


Рейтинг:
0

MadMyche

Это происходит в результате использования литерала ('a') в качестве аргумента против первого присвоения 'a' переменной.


Символьная константа
В языке Си символьные литералы, такие как 'a', имеют тип int, и поэтому sizeof('a') равен sizeof(int).
В C++ символьные литералы имеют тип char, и поэтому sizeof('a') равен sizeof(char).
Это различие может привести к несогласованному поведению в некотором коде, который компилируется как C, так и C++.

Источник: Несовместимость между C и C++: символьные литералы[^]


Рейтинг:
0

KarstenK

В вашем коде буква "b" - это не символ, а безымянная переменная. А это означает, что компилятор по умолчанию использует значение int.

В программировании лучше всего быть как можно точнее потому что компилятор и компоновщик могут понимать ваш код немного иначе, чем вы, и любят его оптимизировать. Недавно я сделал (и снова) опыт, что некоторый код в деструкторах никогда не оправдывается, потому что процесс оптимизации выбросил его.