char a, b;
printf(\"%d\", sizeof(a+b));
What will printf write to the screen?
I thought because sizeof(char)=1, that sizeof(a+b) wil
In C language operands of almost all arithmetic operators are subjected to implicit conversions called usual arithmetic conversions or, in this case, integer promotions. Operands of type char
are promoted to type int
and the actual addition is performed within the domain of int
(or unsigned int
, depending on the properties of char
on that platform). So your a + b
is actually interpreted as (int) a + (int) b
. The result has type int
and sizeof(int)
is apparently 4 on your platform. That 4 is what you see.
And don't use %d
to printf
the result of sizeof
. The result of sizeof
has type size_t
, while %d
requires an int
argument. So, either use the proper format specifier
printf("%zu\n", sizeof(a+b));
or at least cast the argument if you are sure it fits
printf("%d\n", (int) sizeof(a+b));
This is not the same as sizeof(char)
, the argument (i.e. the result of the addition) is promoted to int
so sizeof(a + b)
is in fact equivalent to sizeof(int)
. If you cast the result to char
it will be what you expect. Also, the correct format specifier for sizeof
result which is size_t
is %zu
and not %d
.
Try
printf("%zu", sizeof((char) (a + b)));