数组sizeof(a)与sizeof(&a)的大小差异原因解析
数组与数组地址的sizeof计算解析
先看代码和对应输出:
代码:
int a[4]; printf("%d\n",sizeof(a)); printf("%d\n",sizeof(&a));
输出:
16 8
关于sizeof(a)的解释
- 当数组名
a作为sizeof的操作数时,不会触发数组到指针的隐式转换,此时a代表整个数组,类型为int[4]。在多数系统中int类型占4字节,所以数组总大小为4 * 4 = 16字节,对应第一个输出结果。
关于sizeof(&a)的解释
&a表示整个数组的地址,它的类型是int (*)[4](指向含4个int元素的数组的指针)。但不管指针指向的是什么类型,在64位操作系统中,所有指针的大小都是固定的8字节(32位系统是4字节,这里输出8说明运行环境是64位)。所以sizeof(&a)计算的是这个指针类型本身的大小,结果自然是8。
内容的提问来源于stack exchange,提问作者Dheeraj
相关产品推荐
相关产品推荐

