为什么在使用GCC编译器时,sizeof('3')的结果是4?

21 浏览
0 Comments

为什么在使用GCC编译器时,sizeof('3')的结果是4?

为什么下面程序的输出结果是4?

#include 
int main()
{
    printf("%d\n", sizeof('3'));
    return 0;
}

翻译结果:为什么上述程序的输出是4?

0
0 Comments

为什么在GCC编译器中sizeof('3')等于4?

在C语言中,字符常量的类型是int。在C中,像'3'这样的字符常量的类型是int。

sizeof(character_constant)的结果等于sizeof(int),在这个例子中sizeof(int)等于4。

而在C++中,字符常量的类型是char。

这种差异可能导致一些同时编译为C和C++的代码在行为上不一致。

例如,下面的代码:

memset(&i, 'a', sizeof('a')); // 可疑的代码

常量的值并不决定其类型。'3'本可以是类型为char的常量51,但实际上并不是。

确实需要相应地进行修改,谢谢。

0
0 Comments

在使用GCC编译器时,为什么sizeof('3')的结果是4呢?这个问题的原因是字符常量的类型是int,而不是char(并且在您的平台上,int的大小是4个字节)。

根据C99的草案规范,一个整数字符常量的类型是int。

这可能看起来很奇怪,但请记住,您可以这样做:

const uint32_t png_IHDR = 'IHDR';

换句话说,一个单个的字符常量可以由多个实际字符组成(如上面的四个字符)。这意味着结果的值不能是char类型,因为那样的话它会立即溢出并且没有意义。

注意:上述的方式并不是一个很好的实现它所暗示的目的的方法,这是另外一个讨论的问题。 🙂

为了解决这个问题,我们可以使用sizeof(char)来获取字符类型的大小,而不是sizeof('3'):

sizeof(char)

0