卷子答案选的是A。
A肯定是对的,很多人认为char a[]=“hello”,不就没有说明数组大小吗,但其实c会自动说明大小为6,一个数组大小不说明根本不可能使用。
很多人觉得选C,认为传的是数组首地址,而且一维数组作为形参还不用写一维长度,即int func(int a[]);
这关长度什么事?但其实我们在使用整型数组作为形参时大多数情况还必须得到数组长度,将它也作为形参传进去,不然怎么遍历?
记住这时sizeof(a)/sizeof(a[0])可得不到数组长度了,因为a做为形参使用时,已经降级为普通指针了,已经不再是那个特殊的数组名了。看代码:
void test4(int a[]) {
printf("int a[]作为形参使用sizeof(a)=%d",sizeof(a));
}
int main() {
int a[4] = { 1,2};
printf("sizeof(a)=%d\n",sizeof(a));
test4(a);
return 0;
}
可以看到二者完全不一样,a作为形参传入后就是普通指针了,指针类型在本机是8字节的。
所以整型数组一般还要加传长度才行,即int func(int a[], int length);也就是说被调函数要考虑数组长度,C选项错误。