C 中 sizeof() 的这两种用法有什么区别?

What's the difference between these two uses of sizeof() in C?

如果我这样做 sizeof('r'),字符 'r' 需要 4 个字节的内存。或者,如果我首先声明一个 char 变量并像这样初始化它:

  char val = 'r';
  printf("%d\n", sizeof(val));

输出表明'r'只需要1个字节的内存。

为什么会这样?

这是因为常量 'c' 被解释为 int。 如果你 运行 这个:

printf("%d\n", sizeof( (char) 'c' ) );

它将打印 1.

在 C 文字中 'c' 称为 整数 字符常量,根据 C 标准:

10 An integer character constant has type int.

另一方面,在 C++ 中,此文字称为 character 文字,根据 C++ 标准:

An ordinary character literal that contains a single c-char representable in the execution character set has type char.

在此声明中

char val = 'r';

变量 val 被显式声明为类型 char。在这两种语言中,sizeof( char ) 等于 1。

这是因为文字 'r' 被认为是一个整数,它的值是它的 ASCII 值。 int 通常需要 4 个字节,因此输出。对于第二种情况,您明确将其声明为一个字符,因此它输出 1.

如果你尝试这一行 printf("%d",(10+'c')); 它将打印 109 作为输出,即 (10+99).

如需澄清,您可能需要查看此 table。 http://goo.gl/nOa5ju(字符为 ascii table)

首先,在C语言中有两种类型的int。 16 位(2 字节)和 32 位(4 字节)。

C 中的常量 char 被认为是一个 int,它与它在 table 中表示的字符相关。 'c' 的十进制值为 99(每个 2 个字节)。

好了,你得到了 char 或换句话说 int 值是 99 或 4 个字节。

另一方面,虽然 char var = 'c'; 是一个 1 字节值,因为 ASCII 是用 8 位(1 字节)表示的。 table 个 c 型尺寸 http://goo.gl/yhxmSF