C语言题目一道求解~

voidswap(int*a,int*b){int*tmp;tmp=a;a=b;b=tmp;*tmp=4;}main(){inta=3,b=5;swap(&a,&b);p... void swap(int *a,int *b)
{int *tmp;
tmp=a;
a=b;
b=tmp;
*tmp=4;
}
main()
{int a=3,b=5;
swap(&a,&b);
printf("%d,%d",a,b);
}
输出结果 和运行过程求解释~~~~~
展开
 我来答
百度网友afe2647
2012-11-14 · TA获得超过563个赞
知道小有建树答主
回答量:259
采纳率:100%
帮助的人:144万
展开全部
void swap(int *a,int *b)
{int *tmp;
tmp=a;
a=b;
b=tmp;
*tmp=4; // 如果没有这句,则是仅仅是交换a b的值,此时temp的和b是同一上地址,更改temp 的值就是更改b的值,所以此时b = 4。输出结果是: a = 5,b = 4。
看到楼下的所说的不对,所以补充下,传递的是实参的地址,所以是能够交换a ,b 的值的。

}
更多追问追答
追问
那输出的是5,4?

答案是4,5 肿么回事?
追答
*tmp=4 //这里把b的值改为4了,上面不是说得很清楚了吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-14
展开全部
swap()函数先交换了形参a和b的指向(并没有交换主函数中的两个 变量的值),然后把tmp指向的变量(也就是主函数中的变量a)值变为4,所以输出是4,5
追问
可以再解释清楚点吗?上面有个人说是那样的。。。。我都糊涂了- -
追答
推荐答案有误,虽然传入的是地址,但是在用tmp交换的时候没有解引用,而是直接使用了形参a和b的值(也就是传入的两个地址,而不是这两个地址存放的值),所以它只会交换在swap函数 中的a和b两个形参的指向,并不会交换它们两个指针指向的地址保存的值。

由于在交换时让tmp指向了形参a指向的地址(也就是主函数中的变量a),所以*tmp=4;就把tmp指向的变量值改变为4。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海菊时若薇
2020-03-27 · TA获得超过3660个赞
知道大有可为答主
回答量:3075
采纳率:34%
帮助的人:186万
展开全部
记录每行数据(2维数组)
对每一行排序(不限方法吧,不知道题目前面有没有要求)
或者用1维数组,排序输出,在外面用循环套住。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yr2137205
2012-11-14
知道答主
回答量:30
采纳率:0%
帮助的人:14.5万
展开全部
交换a b的值 这里用到了指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式