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

时间:2015-11-02 23:56:13

标签: c memory character sizeof

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

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

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

为什么会这样?

4 个答案:

答案 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