int a[]={1,2,3,4,5};
int *p=a;
sizeof(a)和sizeof(p)的结果不一样,为什么?
int*p=a ;过程中p少了什么?
sizeof是运算符,在编译器编译阶段就计算出结果了。
int
类型的元素,每个int
占用4个字节的空间,总占用20个字节的空间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