C语言 程序输出

#include<stdio.h>voidchange(inta,int*b){*b=a;a=1;b=&a;printf("\nInfunctionchange:a=%d... #include <stdio.h>
void change (int a,int *b)
{
*b=a;
a=1;
b=&a;
printf("\n In function change : a=%d, *b=%d", a,*b);
}
main()
{
int s=2,t=3;

printf("\n In function main : s=%d,t=%d",s,t);
change(s,&t);
printf("\n In function main :s=%d,t=%d",s,t);

return 0;
}

为什么输出的最后一行是 s=2,t=2 不是等于1……
展开
 我来答
朝朝战士邦
2013-11-09 · 超过27用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:64.9万
展开全部
这个是高伍参数传递类的问题,当时学的也不是很郑轿好...
不过呢,这里是这样的原因:
首先 &t,是将t的地址给了 *b,那么b此时代表了t的喊念肆地址,第一句*b=a,这个就相当于对t的地址的引用之后赋值a,也就是说 相当于 t=a....在这里输出一下*b,你会发现值是2;
那么b=&a,之后为毛 t不变呢??
因为这里你相当于把 b这个指针变量赋值为a的地址,注意这就是说此时b已经不能再指向t了,指向的是a了,所以在哪个change函数里面输出 *b = 1;
也就是说你要明白 指针变量只是一个指针,你把谁的地址给它它就指向谁....
所以呢,最后t = 2咯...
闲来无事id
2013-11-09 · TA获得超过108个赞
知道答主
回答量:71
采纳率:0%
帮助的人:79.2万
展开全部
首先a是值传递所以s肯定不会变,s的结果是2.
其次*b改变的是t的纯尘值改变成2,但是后来b=&a改变的是指针b的地址而不是t的地址所以纯磨对t无影响。所以t仍做裤斗是2
追问
“首先a是值传递所以a肯定不会变,a的结果是2.”

还是没懂为什么s=2.。。a=1了s为什么不等于1.。。。
追答
a是值传递,a拿到的只是s值的一个拷贝(相当于把我的数据给你复制一份,但是我的数据还在,现在你修改了你的那份数据,肯定对我这份没影响)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式