数组名代表的是整个数组而不只是第一个元素,要不然怎么能叫数组名呢
sizeof能判断出这是一个int数组名,能够计算出这个数组使用的空间的大小
当数组名作为参数传递时,数组名退化为指针,int
sum(int
a[])
中的a并不是一个数组而是一个指针,虽然形式上看上去像一个数组。这里面sizeof(a)的大小不是一个int的大小,而是一个指针的大小,与int刚好大小相同
p是一个指针,只是指向了字符串char[3]而已。所以sizeof(p)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以sizeof(p)=4,在c/c++中一个指针占4个字节
我也琢磨了一下,并找了相关资料,真是找不到能求用指针p所指向的字符数组的方法。
只有数组以‘\0'结尾时,才能用求字符串的方法将其长度求出。用strlen(p)就行了
sum函数的参数a和主函数里面的a不是一个东西,sum中的a,在栈上分配有4个字
节的内存空间,它是一个指针形的变量,和主函数中的a的唯一的一点关系就是
它的值存的是函数中a数组的地址,既然sum中的a是一个指针,那么sizeof(指
针)肯定是4.
你可以把int
sum(int
a[])
写成指针的形式
int
sum(int
*a)
函数形参的数组会自动退化成指针
所以
int
sum(int
a[])
{
sizeof(a)==sizeof(int*)
}
需要一个额外的参数来传递数组大小
int
sun(int
a[],
int
size);