关于C中整数指针变量大小的问题

Question regarding size of integer pointer variables in C

我写了这个非常简单的程序来检查 c 中整数指针的大小。

#include <stdio.h>

int main(void) {
    
    int i = 10;
    int* i_ptr = &i;    
    int arr[3] = {13, 14, 15};

    printf("\n ... Size of an integer pointer is: %ld bytes and %ld bits ...", sizeof(i_ptr), 8*sizeof(i_ptr));    
    printf("\n\n ... Size of a 3-element integer array is: %ld bytes and %ld bits ...\n\n", sizeof(arr), 8*sizeof(arr));
    printf(" ... Size of the *arr element is: %ld bytes and %ld bits ...\n\n", sizeof(*arr), 8*sizeof(*arr));

    return 0;
}

关于不同变量大小的输出是:

... Size of an integer pointer is: 8 bytes and 64 bits ...

... Size of a 3-element integer array is: 12 bytes and 96 bits ...

... Size of the *arr element is: 4 bytes and 32 bits ...

现在,我的问题如下。由于我是 运行 64 位 linux 操作系统,我知道整数指针变量的大小是 64 位长。整数数组的大小是 12 个字节,因为一个整数占用 4 个字节的内存,而数组由 3 个整数组成。但是,当我认为数组基本上是 C 中的指针并且数组的变量指向数组的第一个元素时,我假设数组的大小类似于相应指针的大小。然而,我也明白这并不意味着数组的大小与 3 个整数指针的大小一样长 24 个字节。这似乎让我感到困惑,所以任何建议将不胜感激。

数组不是指针。如果你声明一个数组类型的对象那么它的大小等于数组元素占用的字节数。

但是在表达式中使用的数组指示符很少有例外,例如用作 sizeof 运算符的操作数的数组指示符被转换为指向其第一个元素的指针。

来自 C 标准(6.3.2.1 左值、数组和函数指示符)

3 Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.