回 帖 发 新 帖 刷新版面

主题:下面两道题理解很费劲

程序主体部分如下
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;
想问一下调用函数中的实参传入形式参数中后在声明函数中的是怎么运算的,望请详细解答。
另一题
函数主体部分如下;
void sum(int *a)
{a[0]=a[1];}
main()
{
  int aaa【10】={1,2,3,4,5,6,7,8,9,10},i;
  for(i=2;i>=0;i--)
  sum(&aa[i]);
  printf("%d\n",aa[0]);
}
最后的结果是4;
想问一下,传入的实参&aa[i]进入被调函数中后这个i值和被调函数语句中的赋值语句有关联吗,函数究竟如何执行的?[

回复列表 (共5个回复)

沙发

函数中传入地址并操作指针,数组a中元素可能会被修改的。
传入a[2]地址&a[2],假设实参的拷贝
int *p = &a[2]; 
p[-1] == a[1];
p[1] == a[3];
a[2] == a[1] + a[3];
被修改了。
第二个程序自己看下吧、

板凳

过程如下:
aaa[2] = aaa[3];//aaa[3] = 4;
aaa[1] = aaa[2];
aaa[0] = aaa[1];

3 楼

前面2个菜B 如果不懂 就别丢人现眼

4 楼


看你这个2B说的是啥

能听懂的人 估计跟你一样是2B

5 楼

首先你要理解下标运算符的 运算方式。 你传过去的是 a[2]的地址, a[2] 可以解释成这样。

a的地址 再偏移两个地址 得到a[2]; 所以当你把a[2];传过去后

函数中的a的地址就等于 &a[2]; 那么相对这个a而言、 a[1]就等于a[3];
a[-1]就等于a[1]; 根据我的讲解你自己推断下表的运算方式。

我来回复

您尚未登录,请登录后再回复。点此登录或注册