#include <stdio.h>
int main()
{
char c = '0';
printf("%d %d",sizeof(c), sizeof('0'));
return 0;
}
我希望输出为1 1.但实际结果为1 4。
答案 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)
。