有关数组指针传递的问题

int a[]={1,2,3,4,5};
int *p=a;

sizeof(a)和sizeof(p)的结果不一样,为什么?
int*p=a ;过程中p少了什么?

sizeof是运算符,在编译器编译阶段就计算出结果了。

  • sizeof(a)中的a是数组类型的,编译器可以计算出该数组所占空间大小,你提到的数组a中有5个int类型的元素,每个int占用4个字节的空间,总占用20个字节的空间
  • sizeof(p)中的p是指针类型的,指针类型本身也是占有空间的,在32位机器上占有4字节空间,64位机器上占有8字节空间

int*p=a;过程就是加载a的首地址到p中,而且这个只是赋值,不是画上等号,a还是数组类型,p是指针类型,这个在编译阶段,编译器是可以区分出来的,所以编译器可以计算出各自的占用空间

sizeof(a)得到的是数组长度,即数组元素个数,因为参数类型是数组
sizeof(p)得到的是指针的长度,即指针类型的大小,因为参数类型是指针。由于指针类型实际是int类型,所以sizeof(p)值为4

sizeof()计算的是数组里面实际所占的长度,包括\0,但此数组没有自带\0,sizeof(a)计算的是a数组所占的大小,a里面有5个元素都为Int,所以是20,但是p是一个指针,它指向了a,代表的是a地址,即sizeof(p)计算的是a的地址的长度,只用记住一句话,只要是计算地址的长度,那么要么就是4要么就是8,没有其他数值,至于是4还是8这要看你系统是多少为字节,如果是32位则是4,64则是8