如果我sizeof('r')
,字符'r'需要4个字节的内存。或者,如果我首先声明一个char
变量并将其初始化为:
char val = 'r';
printf("%d\n", sizeof(val));
输出表明'r'在内存中只需要1个字节。
为什么会这样?
答案 0 :(得分:4)
这是因为常量'c'
被解释为int
。
如果你运行这个:
printf("%d\n", sizeof( (char) 'c' ) );
它会打印1
。
答案 1 :(得分:3)
在C literal中'c'
被称为整数字符常量并且根据C标准:
10整数字符常量的类型为 int 。
另一方面,在C ++中,这个文字被称为字符文字并且根据C ++标准:
包含单个c-char的普通字符文字 在执行字符集中可表示的类型为 char 。
在此声明中
char val = 'r';
变量val
被显式声明为具有类型char
。在这两种语言中,sizeof( char )
等于1。
答案 2 :(得分:1)
这是因为文字'r'
被视为整数,其值是其ASCII值。 int
通常需要4个字节,因此输出。对于第二种情况,您明确地将其声明为字符,因此它输出1。
如果您尝试此行printf("%d",(10+'c'));
它将打印109作为输出,即(10+99)
。
答案 3 :(得分:0)
有些说明,您可能需要查看此表。 http://goo.gl/nOa5ju(用于字符的ascii表)
首先,在C中有两种类型的int。 16位(2字节)和32位(4字节)。
C中的常量char被认为是一个int,它与它在表上表示的字符有关。 'c'的十进制值为99(每个2字节)。
你去了,你得到了char或者换句话说int值是99或4个字节。
另一方面,虽然char var = 'c';
是一个1字节的值,因为ASCII用8位(1字节)表示。
c类型的表格http://goo.gl/yhxmSF