C语言2级-05年9月(39)

来源:百度知道 编辑:UC知道 时间:2024/06/19 15:14:21
void sum(int a[])
{ a[0] = a[-1]+a[1]; }
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
sum(&a[2]);
printf("%d\n", a[2]);
}
结果为什么是 6
我当然知道a[0]=2+4;
但是输出的printf("%d\n", a[2]); 中的a[2]为什么是6.

你好像不清楚“&”这个标志是干什么用的。你先去掉这个再看看。那么输出的是3,不变。不管在void sum(int a[]) 怎么样处理都是不会变的。因为传的只是输,而不是他的地址。只有当有“&”这个标志才可以对传的值做处理。

int a[10]={1,2,3,4,5,6,7,8,9,10};
地址是从0开始数的,就是1的地址是0,2的地址是1。所以a[2]的值是3。
还有就是a[0] = a[-1]+a[1]; 楼上说的挺清楚了。

&a[2] 传进去是地址 而sum里面a[-1] 就这个地址的前一个,1就是后一个。
前一个是a[1]=2 后一个a[3]=4 2+4=6

a[2]是数组第三个! 传参数传的是a[2]的地址,里面的a[-1]=a[1] a[1]=a[3] 而a[2]传进去的地址相当于a[0],即你传进去的是地址,请再看一下传 参的两种方法:实参,形参