¿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)));