请教一个C程序,函数swap没有return返回值,为什么exchange还要调用呢?而且这个函数好像不太正确,求指教

输入三个数字,按大到小输出,要求要用指针和函数的调用
#include <stdio.h>
void main()
{
void exchange(int *q1,int *q2,int *q3);
int a,b,c,*p1,*p2,*p3;
scanf("%d%d%d",&a,&b,&c);
p1 = &a;
p2 = &b;
p3 = &c;
exchange(p1,p2,p3);
printf("%d %d %d \n",a,b,c);
}
void exchange(int *q1,int *q2,int *q3)
{
void swap(int *pt1,int *pt2);
if(*q1<*q2) swap(q1,q2);
if(*q2<*q3) swap(q1,q3);
if(*q2<*q3) swap(q2,q3);
}
void swap(int *pt1,int *pt2)
{
int temp;
temp = *pt1;
*pt1 = *pt2;
*pt2 = temp;
}
我输入“3,1,2” 时,输出结果却是“2,3,1” 奇怪?????
请各位能一一回答,详细一点,谢谢了哈!

if(*q1<*q2) swap(q1,q2);//因3>1,所以不换 *q1=3 *q2=1
if(*q2<*q3) swap(q1,q3);//因1<2,换 *q1=2 * q2=1 * q3=3
if(*q2<*q3) swap(q2,q3);//因1<3,换 *q1=2, *q2=3 *q3=1
所以输出为 2 3 1
要从大到小的话可以这么写
if(*q1<*q2) swap(q1,q2);//保证*q1>*q2
if(*q1<*q3)
{
swap(q1,q3);
swap(q1,q2);
}
if(*q2<*q3) swap(q2,q3);追问

它的值是怎么返回的啊,没有return语句喔??

追答

因为是按值传参,即传进来的是指向内存的指针,通过指针即可修改内存的值,不需要返回值。你去看看就懂了.

追问

一般比较三个数的大小,是不是只有这三个变量a,b,c 是不够的

追答

够啊?有什么问题?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-01
指针变量和其他的变量不同,如果指针在子函数中的值变了的话,其在主函数中的值也会变
第2个回答  2012-05-01
在最后的if条件语句中有问题追问

我是郁闷它是怎么做到对调的,明明swap函数没有返回,执行了也木有用的啊??