sizeof(c)和size(';a';)给出了不同的结果。(c是字符变量)

sizeof(c)和size(';a';)给出了不同的结果。(c是字符变量),c,char,ascii,C,Char,Ascii,可能重复: 我的问题是: 如果sizeof(c)是1,那么sizeof('a')怎么可能是4?在c中,文字字符(例如'a')是int,而不是char。但是,在C++中,文字字符实际上是代码> char < />代码> S.< /P> < P>,因为在C字符常量中,例如“A”有类型 int 关于这个项目有一个问题: 也许令人惊讶的是,C中的字符常量是int类型的,所以 SIZEOF(“A”)是SIZEOF(int)(虽然这是C++的另一个领域) 不同) 在大多数系统上,“a”==97,这是字

可能重复:

我的问题是:


如果
sizeof(c)
1
,那么
sizeof('a')
怎么可能是
4

在c中,文字字符(例如
'a'
)是
int
,而不是
char
。但是,在C++中,文字字符实际上是代码> char < />代码> S.< /P> < P>,因为在C字符常量中,例如“A”有类型<代码> int 关于这个项目有一个问题:

也许令人惊讶的是,C中的字符常量是int类型的,所以 SIZEOF(“A”)是SIZEOF(int)(虽然这是C++的另一个领域) 不同)


在大多数系统上,“a”==97,这是字符“a”的ASCII值

例如:

int i = 97;
char c = i;
如果使用选项“%c”打印变量
c
的值,您将在屏幕上看到“a”。对于您的问题,我们可以将
sizeof('a')
推断为
sizeof(i)
等于
sizeof(97)


您应该可以在C标准文档中找到它。

好的,谢谢。你能给我指出一些关于这些的编译器文档吗?对于C,C99标准6.4.4.4/10“字符常量”说,“整型字符常量的类型为
int
”。C++03在2.13.2“字符文本”中说,“一个包含单个C字符的普通字符文本具有类型
char
”。哇,这很有用@MichaelBurr!此外,为了历史的兴趣,Stroustrup在“C++的设计和演化”中说:“在C中,字符文本的类型,如<代码> > A'代码/代码>是代码> int <代码>。令人惊讶的是,在C++中给出<代码> a \ <代码>类型>代码> char < /C>不引起兼容性问题。,C和C++中可以表达的每个结构都给出了相同的结果。C++在这个区域是如何不同的?读到这个,C和C++之间的差别实际上只是边缘的。在这两种语言中,
char
类型的表达式在大多数上下文中自动升级为
int
。在诸如
'0'+5
之类的操作中,计算无论如何都是用
int
完成的。@Jens:这一次你错了。促销在
sizeof
中根本不起作用。这纯粹是字符文字的实际类型,这是C和C++之间的一个很大的区别。这基本上就是我的意思,所以我说“大多数”。也许我没能清楚地表达我的观点。这种区别唯一相关的上下文是
sizeof
,可能还有赋值。在所有其他上下文中,
char
提升(基本上)为
int
。这是否是一个很大的区别,实际上是一个欣赏的问题。
ch= 1 a=4 char=1
int i = 97;
char c = i;