C语言 函数问题

voidsum(inta[]){a[0]=a[-1]+a[1]}main(){inta[10]={1,2,3......,10};sum(&a[2]);printf("%... void sum(int a[]) { a[0]=a[-1]+a[1]}
main() {int a[10]={1,2,3......,10}; sum(&a[2]); printf("%d",a[2])}
问题1:为什么sum括号中的实参前要加&。
问题2:sum函数中的a[0],a[-1],a[1]是什么,和a[2]之间有什么关系。
请详细解答,最好的会追加分数,3Q。
展开
 我来答
每壹段路都是壹种领悟
2012-02-17 · TA获得超过162个赞
知道小有建树答主
回答量:114
采纳率:33%
帮助的人:40.3万
展开全部
答案1.数组可以进行函数之间的传递,但是传递的是第一个数字的存储位置,也就可以理解为数组在形参和实参之间是以指针的形式传递的,所以前面要加&
答案2.在答案1中说了,它传递的是指针,也就是说实参传给形参的是指针,也就是a[2]的地址。
实参中的a[2]就成了sum函数中的a[0],sum函数中的a[-1]也就成了主函数中的a[1],sum函数中的a[1]也就成了主函数中的a[3]
什么叫详细啊?
还看不懂,问我,我明天再上,现在睡觉去了

靠,2楼刚好说反了
应该改成
a[2]代表的是值,加上&就变成了a[2]的地址了
JustinoQ
2012-02-17 · 超过13用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:27.8万
展开全部
问题1:
sum函数要求传入的是指针,所以&a[2]代表去数组第二个元素的指针

问题2:
数组的访问就是
address[N] = N[address] = *(address + N);

整个程序来说,是把a[2]的指针地址传给了sum,sun计算时候取a[2]的前一个元素和后一个元素相加,结果赋给a[2],所以实际就是a[2]=a[1]+a[3]=2+4,最后结果是6.

a[2]这样回答不知道请不清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yongyongjijip
2012-02-17 · TA获得超过1488个赞
知道小有建树答主
回答量:1285
采纳率:0%
帮助的人:856万
展开全部
传递给sum函数a数组的地址,用& 形参里已经给出形式。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
精灵王文言
2012-02-17
知道答主
回答量:21
采纳率:0%
帮助的人:15.6万
展开全部
回答一:因为a[2]代表的是地址,加上&就变成了a[2]的值了。形参为值,所以正好接实参的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友af849dc
2012-02-17
知道答主
回答量:26
采纳率:0%
帮助的人:9.6万
展开全部
void sum(int a[]) 参数是数组,不是变量,所以调用时实参也只能是数组名或者是地址,而不能是变量。

sum(&a[2]); 是把a[2]的地址传递给形参数组的首地址,即子函数里的a[0]=a[-1]+a[1]相当于主函数的a[2]=a[1]+a[3]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GANWEIHUN
2012-02-17 · TA获得超过240个赞
知道小有建树答主
回答量:128
采纳率:100%
帮助的人:139万
展开全部
sum(&a[2]); &是取地址符号,把a[2]的地址传递给a[]
第二问的a[-1]?没有这样定义的吧?你可以把你的源程序给我看一下吗?

参考资料:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式