黑冥单 发表于 2012-12-17 20:16:46

谁能给讲解讲解?

# include <stdio.h>
void sum(int a[])
{
a=a[-1]+a;
}
main()
{
int a={1,2,3,4,5,6,7,8,9,10};
sum(&a);
printf("%d\n",a);
}

小新110 发表于 2012-12-17 21:24:14

愚兄认为是2+4,结果是6.a 等于3,你传了它的地址进函数,前后两个数相加,结果赋给它。

qq626041858 发表于 2012-12-17 21:54:04

主函数里面调用了sum函数,把a的地址传进去,而sum函数里面定义了一个a[],我想你知道数组名就是指针,所以不难理解,&a就是一个指向a这个元素的指针,sum函数里面进行的操作实际上就是对主函数里面的数组进行的操作,其中a[-1]就是a的前一个元素,也就是2,而a就是a的下一个元素,也就是4,最终得到的结果就是a=6,你应该知道用指针在外函数里面操作数据的话元素的值在主函数里面会随之改变的,所以最终输出的就是6.

黑冥单 发表于 2012-12-17 21:57:29

qq626041858 发表于 2012-12-17 21:54 static/image/common/back.gif
主函数里面调用了sum函数,把a的地址传进去,而sum函数里面定义了一个a[],我想你知道数组名就是指针,所 ...

O(∩_∩)O谢谢

【red_hat】田野 发表于 2012-12-17 22:08:39

结果是6,在vc++6.0中验证通过;
# include <stdio.h>
void sum(int a[])
{
a=a[-1]+a;
}
main()
{
int a={1,2,3,4,5,6,7,8,9,10};
sum(&a);   //把a的地址传递给sum函数中的a;在子函数中a = 6;a[-1] = 2;a[-2] = 1;
printf("%d\n",a);      
}
地址中放的数值是一定的,只是用不同的数组元素指向了同样的地址;你可以多球几项,看其结果

qq626041858 发表于 2012-12-17 22:26:33

木事,互相学习嘛!!!

暗恋你很久了。 发表于 2012-12-17 23:08:02

a谁能解释一下这里为什么要定义a   我定义一个int 变量 得出的结果是不同的

压寨宝宝 发表于 2012-12-18 16:19:56

暗恋你很久了。 发表于 2012-12-17 23:08 static/image/common/back.gif
a谁能解释一下这里为什么要定义a   我定义一个int 变量 得出的结果是不同的

没能明白你的意思。你是在函数里定义其他int 变量吗?
函数里面的参数的值的改变不能引起主函数的改变。
除非是传数组的地址,或者传引用调用。

暗恋你很久了。 发表于 2012-12-18 16:34:49

压寨宝宝 发表于 2012-12-18 16:19 static/image/common/back.gif
没能明白你的意思。你是在函数里定义其他int 变量吗?
函数里面的参数的值的改变不能引起主函数的改变。 ...

{
a=a[-1]+a;
}
我改的这里 输出的结果就改变了,能否帮忙解释一下?

喜爱健康 发表于 2012-12-18 16:37:14

数组名不是指针,数组名是一个值,一个固定的地址

压寨宝宝 发表于 2012-12-19 12:08:38

暗恋你很久了。 发表于 2012-12-18 16:34 static/image/common/back.gif
{
a=a[-1]+a;
}


这个时候主函数数组里面a的值要改变,
即函数里面。a=2+4=6,主函数数组里面的a=6,但是a的值不变的,依旧是3.所以输出应该是3.

纯墨迹 发表于 2012-12-23 15:56:19

:o:o:o
那个子函数中a的值为6,为什么a没有定义啊?
又为什么会把值返回给主函数中的a?

xitonggongchen 发表于 2013-2-8 10:20:24

这个是简单的传递地址然后对数组元素进行操作

阔怀 发表于 2015-8-30 12:07:14

{:1_1:}

阔怀 发表于 2015-8-30 12:08:09

{:1_1:}
页: [1]
查看完整版本: 谁能给讲解讲解?