为什么下面代码中两个变量的大小不同?

时间:2015-03-13 18:07:45

标签: c

#include<stdio.h>
int main()
{
  short i = 90L;
  long j = 90;
  printf("%d", sizeof(i));
  printf("%d\n", sizeof(j));
  return 0;
}

我刚刚读到,如果我们将L放在一个整数值的末尾,那么实际上它会使存储等于long值,所以基本上它们的意思是这样说,就像我计算两者的大小一样变量,它是不同的,如果它实际上占用了一个长变量的大小,那么显然它会显示大小为4个字节,但它显示的大小只根据短数据类型的大小,那背后的原因是什么呢。

值是否被截断但是当我修改i的值时,它将其打印为仅为90,所以一切都发生了。

2 个答案:

答案 0 :(得分:6)

short i=90L;

90Llong类型的常量。初始化将该值转换为short

long j=90;

90int类型的常量。初始化将其转换为long类型。

对象(变量)的大小与其当前值无关。它是它在内存中占用的字节数。

答案 1 :(得分:1)

来自C标准(6.5.3.4 sizeof和alignof运算符)

  

2 sizeof运算符产生其操作数的大小(以字节为单位)   可以是表达式或类型的带括号的名称。 大小   是根据操作数的类型确定的。

sizeof( short )对应的sizeof( i )小于与sizeof( long )对应的sizeof( j )

编译器无法容纳比为指定类型分配的数据更多的数据。:)