Why does sizeof(char + char) return 4?

后端 未结 2 1570
误落风尘
误落风尘 2021-01-17 18:30
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

相关标签:
2条回答
  • 2021-01-17 18:57

    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));
    
    0 讨论(0)
  • 2021-01-17 19:07

    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)));
    
    0 讨论(0)
提交回复
热议问题