sizeof('0')的值是多少?

时间:2019-07-30 12:12:02

标签: c char sizeof literals

#include <stdio.h>
int main()
{
    char c = '0';
    printf("%d %d",sizeof(c), sizeof('0'));
    return 0;
}

我希望输出为1 1.但实际结果为1 4。

3 个答案:

答案 0 :(得分:4)

C(整数)字符常量中与C ++相反的类型为int

根据C标准(6.4.4.4个字符常量)

  

10个整数字符常量,类型为int

将引号与C ++ 17标准的引号(5.13.3字符文字)进行比较

  

2不以u8,u,U或L开头的字符文字是   普通字符文字。普通字符文字   包含一个可以在执行字符集中表示的c-char   类型为char ,其值等于执行字符集中c-char编码的数值。...

至于这种表达方式

sizeof(c)

然后提供char类型的对象的大小。类型为char的对象的大小始终等于1

根据C标准(6.5.3.4 sizeof和alignof运算符)

  

4当将sizeof应用于具有char类型的操作数(无符号)时   字符或签名字符(或其限定版本),结果为   1 ....

请注意,函数printf的有效调用看起来像

printf("%zu %zu",sizeof(c), sizeof('0'));

答案 1 :(得分:3)

C中的字符文字('0''a''d''.')的类型为int(与C ++中的字符类型不同) char

所以您会进入C:

sizeof(char) == 1
sizeof('0')  == sizeof(int) // note that this is not necessarily 4!

而在C ++中,您将拥有:

sizeof(char) == 1
sizeof('0')  == sizeof(char)

答案 2 :(得分:1)

sizeof('0')

实际上是

sizeof(ASCII value of '0')

是整数。因此它正在打印sizeof(int)