【问题标题】:sizeof(c) and size('a') gives different result . ( c is character variable) [duplicate]sizeof(c) 和 size('a') 给出不同的结果。 ( c 是字符变量)[重复]
【发布时间】: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。这是否有很大的不同,这真的是一个欣赏的问题。

标签: c char ascii


【解决方案1】:

在 C 中,文字字符(例如,'a')是 int,而不是 char。然而,在 C++ 中,文字字符实际上是 chars。

【讨论】:

  • 好的,谢谢。你能给我指出一些编译器文档吗?
  • 对于 C,C99 标准 6.4.4.4/10“字符常量”说,“整数字符常量的类型为 int”。 C++03 在 2.13.2“字符文字”中说,“包含单个 c-char 的普通字符文字的类型为 char”。
  • 哇,这很有用@MichaelBurr!
  • 另外,出于历史的兴趣,Stroustrup 在“C++ 的设计和演变”中说,“在 C 中,诸如'a' 之类的字符文字的类型是int。令人惊讶的是,给出了@ C++中的987654329@类型char不会引起兼容性问题。除了病态的例子sizeof('a'),每个可以用C和C++表达的构造都会给出相同的结果”。
【解决方案2】:

因为在 C 字符常量中,例如 'a' 的类型为 int

关于这个主题有一个C FAQ

也许令人惊讶的是,C 中的字符常量是 int 类型,所以 sizeof('a') 是 sizeof(int) (尽管这是 C++ 的另一个领域 不同)。

【讨论】:

【解决方案3】:

在大多数系统上 'a'== 97,其中字符 'a' 的 ASCII 值。

例如:

int i = 97;
char c = i;

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

您应该能够在 C 标准文档中找到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多