如果我执行sizeof('r')
,字符'r'在内存中需要4个字节。或者,如果我先声明一个char
变量并像这样初始化:
char val = 'r';
printf("%d\n", sizeof(val));
输出结果表明,'r'只需要1字节的内存。
为什么会这样呢?
如果我执行sizeof('r')
,字符'r'在内存中需要4个字节。或者,如果我先声明一个char
变量并像这样初始化:
char val = 'r';
printf("%d\n", sizeof(val));
这是因为常量'c'
被解释为一个int
类型。
如果您运行以下代码:
printf("%d\n", sizeof( (char) 'c' ) );
它将打印1
。
'c'
被称为整型字符常量,并根据 C 标准规定:
10. 整型字符常量的类型为 int。
另一方面,在 C++ 中这个字面值被称为字符字面值,并且根据 C++ 标准规定:
包含单个可在执行字符集中表示的 c-char 的普通字符字面值的类型为 char。
在下面的声明中:
char val = 'r';
变量val
被明确声明为char
类型。在两种语言中,sizeof(char)
都等于1。
'r'
被视为整数,其值为ASCII值。通常需要4个字节的int
,因此输出结果是这样的。在第二种情况下,您明确将其声明为字符,因此它输出1。printf("%d",(10+'c'));
,它将打印出109作为输出,即(10+99)
。为了进一步澄清,您可能需要查看这个表格。 http://goo.gl/nOa5ju(字符的ASCII表)
首先,在C语言中有两种类型的int。16位(2字节)和32位(4字节)。
C语言中的常量char被认为是与其在表格上表示的字符相关的整数。'c'的十进制值为99(每个2字节)。
那么你就得到了char或者说int值为99或4字节。
另一方面,char var = 'c';
是一个1字节的值,因为ASCII用8位(1字节)表示。
c类型大小表http://goo.gl/yhxmSF