为什么 sizeof(array) 相乘?

Why sizeof(array) is multiplied?

这对我来说毫无意义:

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

为什么是 8 个? 如何使其大小为 2?

你需要像这样除以类型的大小

sizeof(start_tab) / sizeof(int)

sizeof 以字节为单位给出大小,因为每个 int4 字节那么其中两个显然是八个,所以你可以除以一个 [=12] 的大小=] 并获取您要查找的值。

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

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

请注意,sizeof 是运算符,不是函数。 sizeof returns 提供的数据类型的大小。

Why 8?

start_tab 类型为 int [2]、returns 2 * sizeof (int)#8.

How make it to be size of 2?

如果想得到数组中元素的个,只需将总大小除以单个元素的大小即可,如

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

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

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

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

2 The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type.

数组

int start_tab[2];

占用2 * sizeof( int )字节,因为它有两个元素,每个元素的类型都是int。所以如果 sizeof( int ) 等于 4 那么数组占用 8 bytes.

所以你有一个公式

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 生成数组的第一个元素。