我写了下面的程序来确定静态数组的大小。当我运行它时,得到了一个无法解释的结果。我在stackexchange和google上进行了一些搜索,但是我读到的内容都没有给我任何提示。
当我在Linux系统上编译和运行这个程序时,会得到以下结果:
我从http://c-faq.com/malloc/sizeof.html看到,
#include <stdio.h>
int main()
{
int arrSize, intSize, elemSize;
int input[9][9];
arrSize = sizeof(input);
intSize = sizeof(int);
elemSize = sizeof(input[0]);
printf("Array: %d, Element: %d, Int: %d\n", arrSize, elemSize, intSize);
return sizeof(input);
}
当我在Linux系统上编译和运行这个程序时,会得到以下结果:
./a.out ; echo $?
Array: 324, Element: 36, Int: 4
68
我从http://c-faq.com/malloc/sizeof.html看到,
sizeof
是在编译时计算的。如果我将返回值更改为return sizeof(input[0])
,则得到预期的36
;如果我将其更改为return sizeof(input[0][0])
,则得到4
,也是预期的结果。那么为什么sizeof(input)
返回68
,但存储后却得到了预期的324
呢?
324%256 = 68
。 - Shafik Yaghmour