C语言的一个小程序问题

#include<stdio.h>viodfun(inta,int*b,int*c){a=456;*b=567;*c=789;}voidmain(){intx=10,y=... #include<stdio.h>
viod fun(inta, int *b,int*c)
{
a=456;*b=567; *c=789;
}
void main()
{
int x=10, y=20, z=30, *p=&z;
fun(x, &y, p);
printf("%d,%d.%d",x,y,z);
}
请大家帮我分析一下为什么x的值没变,只有y和z变了
展开
 我来答
White_MouseYBZ
2014-06-11 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6633万
展开全部
因为y和z传给函数fun的是它们的地址&y和&z(z是通过p传的),而a传的是值,即在fun中操作的是a的拷贝,所以不会影响main中的a的值。
不是平江的
2014-06-11
知道答主
回答量:16
采纳率:0%
帮助的人:11.4万
展开全部
fun的传参时候要想改变原来的值需要传地址,你fun定义时候a传的是x的值改变a的值时候不改变x地址里的值,而bc传的是地址,fun里改变的是bc对应的地址里的值bc在传参过程中传的是y和z 的地址,所以最终yz的值是会改变的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
顽健还可爱丶比目鱼m
2014-06-11 · TA获得超过305个赞
知道答主
回答量:130
采纳率:100%
帮助的人:121万
展开全部
main()
{
int c;
while(1){
printf("-------------------------------------------------\n");
printf("* 0. exit \n") ;
printf("* 1. fun1 \n");
printf("* 2. fun2 \n");
printf("* 3. fun3 \n");
printf(" -------------------------------------------------\n");
scanf("%d",&c);
switch(c)
{
case 1:fun1();break;
case 2:fun2();break;
case 3:fun3();break;
case 0:exit(0);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式