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

Teo Protoulis

我写了这个非常简单的程序来检查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除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为“ array of type”的表达式将转换为类型为“ pointer”的表达式键入'',它指向数组对象的初始元素,不是左值。如果数组对象具有寄存器存储类,则该行为是不确定的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章