请教一道C语言的题

#include<stdio.h>voidsub(int*s,inty){staticintt=3;y=s[t];t--;}voidmain(){inta[]={1,2,... #include<stdio.h>
void sub(int *s,int y)
{static int t=3;
y=s[t];t--;}
void main()
{int a[]={1,2,3,4},i;
int x=0;
for(i=0;i<4;i++)
{sub(a,x); printf("%d",x);}
printf("\n");}
}
这道题应该怎么分析,帮下忙,我刚学,讲下步骤,谢谢了
展开
 我来答
eavqgx
2012-04-16
知道答主
回答量:3
采纳率:0%
帮助的人:4662
展开全部
这道题如果没抄错的话,应该是考察实参到形参是单向值传递的;
至于流程,先执行main函数,当执行到"sub(a,x);"时,调用sub函数,这时的操作不对主函数造成任何影响,所以输出是四个0.
还有,第五行的“void main()”写法不规范,应写成“int main()”,并在main函数函数体的最后加上“return 0;”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fallen915
2012-04-16 · TA获得超过132个赞
知道答主
回答量:45
采纳率:0%
帮助的人:15.3万
展开全部
是不是原题抄错了,这样的话那输出就全是0了啊,x是值传递的,不会改变的,原题是要输出数组的值吧??
追问
对,这是选择题,答案就是4个0,但我不知道流程是怎样的,能讲解下吗
追答
哦,它是这样的,定义了数组a[]和整形变量x,然后调用sub()函数,但此时参数x采用的是值传递(注意sub(int *s,int y)这里y 没有像s那样前面带*),函数在被调用时系统为其开辟一个内存空间,此时x的值拷贝了一份到这个空间供计算用(就是y了),所以y和x是两个不同的空间,对y的修改不会影响到x,所以函数调用后x还是原来的值。但要是地址传递的话(就是带了*号的),那么就不是拷贝一份了,而是指向原来的那块内存空间,只是起了个别名,就如s,它是指向你原来的那个数组的,所以修改它就可以修改数组,这么说能明白吗??
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
000000张扬
2017-08-25
知道答主
回答量:1
采纳率:0%
帮助的人:938
展开全部
我运行出来是4321,但我不知道为什么,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式