【发布时间】:2023-03-30 14:44:02
【问题描述】:
可能重复:
Why are C character literals ints instead of chars?
why sizeof('a') is 4 in C?
#include<stdio.h>
int main()
{
char ch;
fflush(stdin);
ch=getchar();
printf("ch= %d a=%d char=%d", sizeof(ch),sizeof('a'),sizeof(char));
}
我输入“a”(不带引号)作为输入,而我在 gcc 版本 4.5.1 中得到的输出是:
ch= 1 a=4 char=1
我的问题是:
如果sizeof(c)是1,那么sizeof('a')怎么可能是4?
【问题讨论】:
-
C 和 C++ 之间的这种差异实际上只是微不足道的。在这两种语言中,
char类型的表达式在大多数情况下都会自动提升为int。因此,在诸如'0' + 5之类的操作中,无论如何都会使用int完成计算。 -
@Jens:这一次你错了。
sizeof根本不会进行促销活动。这纯粹是字符文字的实际类型的问题,这 是 C 和 C++ 之间的一个很大区别。 -
@R.. 这基本上就是我的意思,因此我说“大多数”。也许我错过了清楚地表达我的观点。这种区别相关的唯一上下文是
sizeof,也许还有赋值。在所有其他上下文中,char(基本上)提升为int。这是否有很大的不同,这真的是一个欣赏的问题。