char a, b;
printf("%d", sizeof(a+b));
printf会输出什么内容?
我以为因为sizeof(char)=1,所以sizeof(a+b)也应该是1,但实际上它是4。我不理解这个问题,为什么当我们加两个字符时它会输出4?
printf("%zu\n", sizeof(a+b));
或者至少在确定它适合时对参数进行转换
printf("%d\n", (int) sizeof(a+b));
float
类型不会被提升。在某些古老的C语言标准之前,float
类型曾经被无条件地提升为double
类型。但是这个想法在C89/90发布之前就被放弃了。在标准C中,这种表达式中的float
类型不会被提升为double
类型。(但是当将参数传递给具有未声明参数的函数时,float
类型会被隐式转换为double
类型。) - AnT stands with Russiasizeof(char)
不同,参数(即加法结果)被提升为int
,因此sizeof(a + b)
实际上等价于sizeof(int)
。如果将结果转换为char
,则会得到您期望的值。另外,sizeof
结果的正确格式说明符是size_t
,而不是%d
,应使用%zu
。printf("%zu", sizeof((char) (a + b)));
sizeof
运算符的什么内容? - Iharob Al Asimi'a'
已经是一个int
,但是这个问题是关于将char
提升为整数的。 - M.M