Belows是简单的代码,用于比较数组本身的大小和指向数组的指针大小。
#include <stdio.h>
int main(){
int kkarray[100]= {1,0,};
int (*kkpointer) = kkarray;
printf("size of array using array itself : %ld \n" , sizeof(kkarray));
printf("size of array using pointer to array : %ld \n" , sizeof(kkpointer));
}
但结果是,
400
8
我能理解第一个值是400,但是第二个,我认为它也应该是400因为我指定了一个指向数组的指针,kkpointer,它有点像数组的名字,它是const地址价值。例如,我可以使用kkpointer [0]获取数组的第一个值。 我想知道为什么我得到了&#39; 8&#39;而不是400。 我不认为&#39; 8&#39;是地址本身的大小。 请告诉我。感谢
答案 0 :(得分:6)
任何指针的大小始终是平台上的8
,因此它取决于平台。
sizeof
运算符不关心指针指向的位置,它给出了指针的大小,在第一种情况下它只是给出了数组的大小,而且不一样。< / p>
引自§6.5.3.4,¶2 N1570草案
sizeof运算符产生其操作数的大小(以字节为单位),可以是 表达式或类型的括号名称。 大小取决于类型 操作数。结果是整数。如果操作数的类型是可变长度数组 type,操作数被评估;否则,不评估操作数,结果是 整数常量
和§6.5.3.4,¶4
当sizeof应用于具有char,unsigned char或者类型的操作数时 signed char,(或其合格版本),结果为1. 应用于 具有数组类型的操作数,结果是数组中的总字节数 .103)何时 应用于具有结构或联合类型的操作数,结果是总数 这样一个对象中的字节,包括内部和尾部填充
所以你可以看到,当应用于数组时,它给出了总字节数。但是如果你传递一个指针,那么结果将是它的类型的大小。