我正在阅读 K&R 的 TCPL,当我阅读有关数组和指针的内容时,我在下面写了这个小代码:
#include <stdio.h>
int sum(int a[])
{
int t = 0;
int length = sizeof(a) / sizeof(a[0]) ;
// printf("%d\n",length);
for(int i = 0; i != length; ++i)
{
t += a[i];
}
return t;
}
int main()
{
int b[5] = {1, 2, 3, 4, 5};
printf("%d\n",sum(b));
return 0;
}
输出答案是 1 NOT 15,然后我通过添加printf("%d\n",length);
输出长度为 1 NOT 5 来调试此代码。 TCPL 告诉当数组名称用作参数时,数组名称转换为指针,但输出答案是错误的,所以我想知道:
- 当调用一个以数组名作为参数的函数时会发生什么?
- 数组
a[]
中使用的参数sum(int a[])
有没有存储? - 调用数组时我看到两种样式:
fun(int a[]); fun(b)
和fun(int *a);fun(b)
,有什么区别?
非常感谢:-)