为什么指向数组的指针大小总是8?

时间:2015-01-16 14:24:23

标签: c arrays pointers

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;是地址本身的大小。 请告诉我。感谢

1 个答案:

答案 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)何时   应用于具有结构或联合类型的操作数,结果是总数   这样一个对象中的字节,包括内部和尾部填充

所以你可以看到,当应用于数组时,它给出了总字节数。但是如果你传递一个指针,那么结果将是它的类型的大小。