为什么 sizeof() 没有为 int 数组给出不同的结果?

Why the sizeof() is not giving the different result for int array?

我在 Windows 10 中为 C 程序使用代码块。我在下面写这个程序,但不是给出 12,而是给出 24 作为输出。我也使用在线编译器检查过它,但它仍然给出相同的输出。

 #include<stdio.h>
 int main()
 {
  int num[]={5,7,9,0,1,7};
  printf("%d",sizeof(num));
  return 0;
 }

but instead of giving 12 it gives 24 as output

不确定为什么您会期望输出为 12。您可能假设 sizeof(int)2,但不一定在所有平台上都是如此。

sizeof(int) 依赖于平台,sizeof(int) 在您的平台上是 4。因此,输出为 24.

注意:要打印 size_t(也就是 sizeof() returns),请使用 %zu:

  printf("%zu",sizeof(num)); 

也许这有助于您的理解:

#include <stdio.h>

int main()
{
    int num[] = { 5, 7, 9, 0, 1, 7 };

    printf("sizeof(int) = %zu\n", sizeof(int));

    printf("sizeof(num[0]) = %zu\n", sizeof(num[0]));

    printf("sizeof(num) = %zu\n", sizeof(num));

    printf("number of elements in num[]: %zu\n", sizeof(num) / sizeof(num[0]));

    return 0;
}

输出:

sizeof(int) = 4
sizeof(num[0]) = 4
sizeof(num) = 24
number of elements in num[]: 6

现在如果你把它翻译成 Pascal:

program sizetest;

var
  num: array[1..6] of integer;

begin
  writeln('sizeof(integer) = ', sizeof(integer));
  writeln('sizeof(num[1]) = ', sizeof(num[1]));
  writeln('sizeof(num) = ', sizeof(num));
  writeln('number of elements in num[]: ', sizeof(num) / sizeof(num[1]));
end.

您得到以下输出:

sizeof(integer) = 2
sizeof(num[1]) = 2
sizeof(num) = 12
number of elements in num[]: 6

最后(我希望它不会毁了你的世界)看看 python 支持非常大的整数:

import sys

sys.getsizeof(int())
24

是的,二十四岁!所以现在应该清楚 int 的大小确实取决于平台。

另读https://en.wikipedia.org/wiki/Integer_(computer_science)