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

时间:2016-01-26 22:14:29

标签: c arrays sizeof

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

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

2 个答案:

答案 0 :(得分:4)

  

但不是给出12而是给出24作为输出

不确定为什么您希望输出为<label ng-repeat="item in repeatingItems"> {{item}} <setting item="item" myProperty="settings.someProperty" /> </label> 。您可能假设12sizeof(int),并非在所有平台上都是如此。

2取决于平台,sizeof(int)在您的平台上为sizeof(int)。因此,输出为4

注意:要打印24size_t返回的内容),请使用sizeof()

%zu

答案 1 :(得分:3)

这可能有助于您理解:

#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)