c语言,指针,交换三个数的大小顺序~~~~(>_<)~~~~

#include<stdio.h>intmain(){voidchan(int*x,int*y);int*a,*b,*c,r,s,t;printf("input3numb... #include<stdio.h>
int main()
{
void chan(int *x,int *y);
int *a,*b,*c,r,s,t;
printf("input 3 numbers\n");
scanf("%d%d%d",&r,&s,&t);
*a=r;
*b=s;
*c=t;
chan(a,b);
chan(b,c);
chan(a,b);
printf("%d%d%d",r,s,t);
return 0;
}
void chan(int *x,int *y)
{int *p;
if (*x<*y)
*p=*x;
*x=*y;
*y=*p;
}
展开
 我来答
Replay1108
推荐于2018-04-27 · TA获得超过604个赞
知道小有建树答主
回答量:87
采纳率:100%
帮助的人:64.5万
展开全部
亲你这个程序中存在两个错误。
1.给指针赋值的方式不对,a,b,c这三个指针并没有进行初始化赋值,所以只能将变量的地址赋给它,将r的地址赋给指针,应改为
a=&r;
b=&s;
c=&t;
2.chan函数里面,应改为
*p=*x;
*x=*y;
*y=*p;
有问题可以追问,望采纳。
追问
第二处的原因是什么呢
追答
抱歉,刚才打漏了,第二个问题p前面的*都应该去掉,前面
int *p;的*也要去掉。
指针是个存着地址的变量,我们每定义一个变量,内存就会给他分配空间,那么每个变量必须会有一个存储他的地方,我们称为地址,他指向谁,里面就存着谁的地址。*y=p;
此时p里面存的是a的地址(记住这一点),还可以用取地址符&获取变量的地址,如&a;表示的是a的地址。变量的值可以用*号获取。* 后面加一个地址,表示这个地址里面的数值(也记住,很重要)
指针有几个原则
* 后面只能跟地址, *p 表示参数的值
&后面只能跟变量。 &a 表示参数a的地址
gbwzycg
2013-01-01 · TA获得超过134个赞
知道答主
回答量:360
采纳率:0%
帮助的人:223万
展开全部
*a=r;
*b=s;
*c=t;
改成:a=&r;b=&s;c=&t;
'*'是取值运算符,‘&’是取地址

*p=*x;
*x=*y;
*y=*p;
把p前面的'*'都去掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
希伯来爵
2013-01-01 · TA获得超过612个赞
知道答主
回答量:187
采纳率:100%
帮助的人:92.1万
展开全部
野指针是不能进行*操作的
有两处错误
a=&r;
b=&s;
c=&t;
/////////////////////////////////////
void chan(int *x,int *y)
{int p;
if (*x<*y)
p=*x;
*x=*y;
*y=p;
}
//////////////////////////////////////
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
noahmissing
2013-01-01 · 超过43用户采纳过TA的回答
知道小有建树答主
回答量:151
采纳率:0%
帮助的人:123万
展开全部
#include<stdio.h>
int main()
{
void chan(int *x,int *y);
int r,s,t;
printf("input 3 numbers\n");
scanf("%d%d%d",&r,&s,&t);
chan(&r,&s);
chan(&s,&t);
chan(&t,&r);
printf("%d %d %d\n",r,s,t);
return 0;
}
void chan(int *x,int *y)
{int p;
if (*x<*y)
p=*x;
*x=*y;
*y=p;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式