C语言试题,实参形参有点不懂....

例:intk=0;voidfun(intm){m+=k;k+=m;printf("%d%d",m,k);}main(){inti=4;fun(i++);printf("%... 例:
int k=0;
void fun(int m)
{
m+=k;k+=m;
printf("%d %d",m,k);
}
main()
{
int i=4;
fun(i++);
printf("%d %d",i,k);
}
结果是 4 4 5 5 不懂为什么形参的值可以改变实参,而且不是指针!
是否符全局变量 k有关吗!
额 不好意思 第五行是printf("%d %d",m,k++);
展开
 我来答
貌似風輕
2013-03-30 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:681万
展开全部

首先,刚才我运行了下,结果不是4 4 5 5,而是4 4 5 4

在这里调用了一次函数fun()

形参是 m,实参是 i

k就是一个全局变量,既不是形参也不是实参

调用函数fun()的过程中形参的值m变为4,全局变量k的值也变为4。函数调用结束后形参m消失,全局变量k依然为4。同时函数调用结束之后 i 自加一次由4变成5。

所以最后显示出来4 4 5 4

这里形参m的值并没有改变实参 i

德克and德华

2013-03-30 · TA获得超过2650个赞
知道小有建树答主
回答量:1207
采纳率:100%
帮助的人:619万
展开全部
因为传参的时候有i++,这时更改的i是在main函数的那个i,所以i变成了5

k是全局变量,只有一分拷贝,所有函数对它进行更改都可以改变它本身的值。在fun函数中对它的任何更改,在其他它被调用的地方也会有作用,它们是同一个变量。所以main中的k会有4这个值。

另外,即使是k++,打印的也是4,如果是++k就打印5。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深蓝黯泪
2013-03-30
知道答主
回答量:7
采纳率:0%
帮助的人:7036
展开全部
跟k无关;形参在没有指针的调用的情况下是改变不了实参即main函数里的值得;
形参的值在自定义函数中作用完后即会释放存储单元。
而你给的例子中,应先弄清i++和++i在用其他运算符是的不同
这道题是先将4传递给形参;然后在自定义函数中运行printf所以都是4
而主函数中再运行i++;i++即i=i+1;是会改变i的值得;所以i变成了5,输出就是5;

你可以试着将i++换成++i在运行;会发现结果是5555
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
电子开发藏经阁
2013-03-30 · TA获得超过101个赞
知道答主
回答量:23
采纳率:0%
帮助的人:8.2万
展开全部
为什么我的是 4 4 5 4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式