为什么在使用GCC编译器时,sizeof('3')的结果是4?
在使用GCC编译器时,为什么sizeof('3')的结果是4呢?这个问题的原因是字符常量的类型是int,而不是char(并且在您的平台上,int的大小是4个字节)。
根据C99的草案规范,一个整数字符常量的类型是int。
这可能看起来很奇怪,但请记住,您可以这样做:
const uint32_t png_IHDR = 'IHDR';
换句话说,一个单个的字符常量可以由多个实际字符组成(如上面的四个字符)。这意味着结果的值不能是char类型,因为那样的话它会立即溢出并且没有意义。
注意:上述的方式并不是一个很好的实现它所暗示的目的的方法,这是另外一个讨论的问题。 🙂
为了解决这个问题,我们可以使用sizeof(char)来获取字符类型的大小,而不是sizeof('3'):
sizeof(char)