c char sizeof

¿Por qué sizeof(char+char) devuelve 4?



size of int (2)

char  a, b;      printf("%d", sizeof(a+b));

¿Qué imprime printf en la pantalla?

Pensé que debido a que sizeof (char) = 1, ese sizeof (a + b) también será 1, pero resultó ser 4. No entiendo esto, ¿por qué escribe 4 si estamos agregando dos caracteres?


En el lenguaje C, los operandos de casi todos los operadores aritméticos están sujetos a conversiones implícitas llamadas conversiones aritméticas habituales o, en este caso, promociones enteras . Los operandos de tipo char se promueven a tipo int y la adición real se realiza dentro del dominio de int (o unsigned int , dependiendo de las propiedades de char en esa plataforma). Entonces su a + b realidad se interpreta como (int) a + (int) b . El resultado tiene el tipo int y sizeof(int) es aparentemente 4 en su plataforma. Eso 4 es lo que ves.

Y no use %d para printf el resultado de sizeof . El resultado de sizeof tiene tipo size_t , mientras que %d requiere un argumento int . Entonces, use el especificador de formato apropiado

printf("%zu/n", sizeof(a+b));

o al menos eche el argumento si está seguro de que encaja

printf("%d/n", (int) sizeof(a+b));


Esto no es lo mismo que sizeof(char) , el argumento ( es decir, el resultado de la suma ) se promueve a int por lo que sizeof(a + b) es de hecho equivalente a sizeof(int) . Si lanzas el resultado a char será lo que esperas. Además, el especificador de formato correcto para el resultado sizeof que es size_t es %zu y no %d .

Tratar

printf("%zu", sizeof((char) (a + b)));