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。 展开
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。 展开
6个回答
展开全部
答案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]的地址了
答案2.在答案1中说了,它传递的是指针,也就是说实参传给形参的是指针,也就是a[2]的地址。
实参中的a[2]就成了sum函数中的a[0],sum函数中的a[-1]也就成了主函数中的a[1],sum函数中的a[1]也就成了主函数中的a[3]
什么叫详细啊?
还看不懂,问我,我明天再上,现在睡觉去了
靠,2楼刚好说反了
应该改成
a[2]代表的是值,加上&就变成了a[2]的地址了
展开全部
问题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]这样回答不知道请不清楚。
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]这样回答不知道请不清楚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传递给sum函数a数组的地址,用& 形参里已经给出形式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回答一:因为a[2]代表的是地址,加上&就变成了a[2]的值了。形参为值,所以正好接实参的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void sum(int a[]) 参数是数组,不是变量,所以调用时实参也只能是数组名或者是地址,而不能是变量。
sum(&a[2]); 是把a[2]的地址传递给形参数组的首地址,即子函数里的a[0]=a[-1]+a[1]相当于主函数的a[2]=a[1]+a[3]
sum(&a[2]); 是把a[2]的地址传递给形参数组的首地址,即子函数里的a[0]=a[-1]+a[1]相当于主函数的a[2]=a[1]+a[3]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sum(&a[2]); &是取地址符号,把a[2]的地址传递给a[]
第二问的a[-1]?没有这样定义的吧?你可以把你的源程序给我看一下吗?
第二问的a[-1]?没有这样定义的吧?你可以把你的源程序给我看一下吗?
参考资料: ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询