在C中,为什么使用sizeof函数作为分母来存储数组中元素的数量?

Jul*_*ell 1 c arrays sizeof divide

我不止一次看到在数组索引 0 上使用的 sizeof 运算符在存储数组元素数量时充当分母。我的问题是为什么使用 sizeof 运算符而不是仅除以 1 或根本不除?

请参阅下面https://www.bravegnu.org/gnu-eprog/c-startup.html中的一些示例代码中的这种现象的示例。

static int arr[] = { 1, 10, 4, 5, 6, 7 };
static int sum;
static const int n = sizeof(arr) / sizeof(arr[0]);  //RIGHT HERE!!!!!

int main()
{
        int i;

        for (i = 0; i < n; i++)
                sum += arr[i];
}
Run Code Online (Sandbox Code Playgroud)

abe*_*nky 5

static int arr[] = { 1, 10, 4, 5, 6, 7 };
Run Code Online (Sandbox Code Playgroud)

数组arr是一堆整数,准确地说是六个。每个整数占用一定数量的字节(为了这个答案,我们假设四个字节 - 在某些系统上它可以更多或更少)。

因此,sizeof(arr)是 24 个字节,每个整数乘以 4 个字节的 6 个整数。

如果您想知道数组中有多少个元素(而不是字节),请将整个数组的大小除以单个成员的大小(以下之一):

static const int n = sizeof(arr) / sizeof(arr[0]);
static const int n = sizeof(arr) / sizeof(*arr);

// sizeof(arr) / sizeof(arr[0]) == 24 / 4 == 6 elements
Run Code Online (Sandbox Code Playgroud)