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
如果我这样做 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