c语言的指针交换问题

看以下两个例子,同样是通过交换指针改变变量的值,为什么第一个成功了,而第二个失败了#include<stdio.h>main(){int*p,*q,*t,a,b;puts... 看以下两个例子,同样是通过交换指针改变变量的值,为什么第一个成功了,而第二个失败了
#include<stdio.h>
main()
{
int *p,*q,*t,a,b;
puts("please input a and b:");
scanf("%d%d",&a,&b);
p=&a;q=&b;
if(a<b)
{
t=p;p=q;q=t;
}
printf("max=%d,min=%d\n",*p,*q);
}
输入3 5
运行结果max=5,min=3
#include<stdio.h>
void swap(int *a,int *b)
{
int *t;
t=a;a=b;b=t;
}
main()
{
int i,j,*p=&i,*q=&j;
printf("please input i and j:\n");
scanf("%d%d",&i,&j);
swap(p,q);
printf("%d %d\n",*p,*q);
}
输入3 5
执行结果3 5
展开
 我来答
斋傲云06
推荐于2018-05-15 · TA获得超过280个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:257万
展开全部
在你的主函数里你定义了两个指针变量p和q,分别指向i和j,在你的swap函数里你又定义了两个指针变量a和b,p和q,a和b,都是存着i和j的地址,这里t=a;a=b;b=t,只是把a和b所指向的内存互换了,而本身p和q所指向的内存是没有变化的,所以你主函数里printf("%d %d\n",*p,*q);还是3和5!
你可以把t=a;a=b;b=t修改成*t=*a;*a=*b;*b=*t,这样你是对i和j的值互换!
sun_siliang
2012-03-13 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4425万
展开全部
//C语言的参数传递方式是传值。第二个改为:
#include<stdio.h>
void swap(int *a,int *b) //交换a,b的值,不起任何作用。应该交换a,b所指对象的值。
{
int t;
t=*a;*a=*b;*b=t;
}
main()
{
int i,j,*p=&i,*q=&j;
printf("please input i and j:\n");
scanf("%d%d",&i,&j);
swap(p,q);
printf("%d %d\n",*p,*q);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zero_fn
2012-03-13 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:438万
展开全部
楼上都直接交换变量了吧,楼主好像是想交换指针指向而不是交换变量的哦,要这样
#include<stdio.h>
void swap(int **a,int **b)
{
int t;
t=*a;*a=*b;*b=t;
}
main()
{
int i,j,*p=&i,*q=&j;
printf("please input i and j:\n");
scanf("%d%d",&i,&j);
swap(&p,&q);
printf("%d %d\n",*p,*q);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式