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

Arrays 关于C中整数指针变量大小的问题,arrays,c,pointers,implicit-conversion,sizeof,Arrays,C,Pointers,Implicit Conversion,Sizeof,我编写了这个非常简单的程序来检查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_p

我编写了这个非常简单的程序来检查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;
}

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

数组不是指针。如果声明数组类型的对象,则其大小等于数组元素占用的字节数

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

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

3除非它是sizeof运算符或一元数的操作数& 运算符,或是用于初始化数组的字符串文字 类型为“”的数组“”的表达式转换为 类型为“指向类型的指针”且指向初始值的表达式 数组对象的元素,并且不是左值。如果数组对象 已注册存储类,行为未定义

“数组基本上是C语言中的指针”-这一点都不正确。数组可以衰减为指针,但它们“基本上不一样”
... 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 ...