为什么sizeof(数组)成倍增加?

时间:2015-04-07 20:08:01

标签: c arrays sizeof

这对我来说毫无意义:

    int start_tab[2];
    printf("size of an array: %d\n", sizeof(start_tab));
    8

为什么8? 如何使它的大小为2?

6 个答案:

答案 0 :(得分:3)

您需要除以此类型的大小

sizeof(start_tab) / sizeof(int)

sizeof以字节为单位给出大小,因为每个int都是4个字节,然后其中两个显然为8,所以你可以除以int的大小并获得您正在寻找的价值。

答案 1 :(得分:3)

您必须执行sizeof(start_tab)/sizeof(start_tab[0])才能获得数组中元素的数量

答案 2 :(得分:3)

请注意,sizeof是一个操作员,而不是一个功能。 sizeof返回提供的数据类型的大小。

  

为什么8?

start_tab属于int [2]类型,返回2 * sizeof (int) 8

  

如何使它的大小为2?

如果要获取数组中元素的 count ,只需将总大小除以单个元素的大小,例如

sizeof(start_tab) / sizeof(start_tab[0])

#在您的平台中,sizeof(int) == 4。

答案 3 :(得分:2)

因为int是4个字节...所以乘以28所以如果你想要元素大小除以sizeof(int)

答案 4 :(得分:2)

因为int在您的平台上32位,即4个字节。您有2 int乘以32位等于64位,即8字节。 sizeof将以字节为单位返回数据类型的大小。

答案 5 :(得分:2)

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

  

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

阵列

int start_tab[2];

占用2 * sizeof( int ) 字节,因为它有两个元素,每个元素都有int类型。因此,如果sizeof( int )等于4,则数组占用8 字节

所以你有一个公式

sizeof( start_tab ) = 2 * sizeof( int )

或者一般情况下,如果数组有N个类型为T的元素,例如

T array[N];

然后

sizeof( array ) = N * sizeof( T )

或者,由于数组的每个元素都包含类型T,包括数组的第一个元素,因此您也可以编写

sizeof( array ) = N * sizeof( array[0] )

使用此公式,您可以计算N

N = sizeof( array ) / sizeof( array[0] )

N = sizeof( array ) / sizeof( *array )

因为*array产生数组的第一个元素。