C语言按大小排序问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 22:08:02
int swap(int *x,int *y)
{ int temp;
temp=*x;
*x=*y;
*y=temp;
}
int sswap(int x,int y,int z){

if(x<y)swap(&x,&y);
else;
if(x<z)swap(&x,&z);
else;
if(y<z)swap(&y,&z);
}
main(){
int x1,y1,z1;
scanf("%d%d%d",&x1,&y1,&z1);
sswap(x1,y1,z1);
printf("%d%d%d",x1,y1,z1);
getch();
}
为何输入多少它就返回多少,没按大小排列.是哪里错了?
高手帮忙!~

因为调用sswap函数时你采用的是值传递,没有返回值,当然原样输出了。我修改了一下:
#include <stdio.h>
void swap(int **x,int **y)
{ int temp;
temp=**x;
**x=**y;
**y=temp;
}
void sswap(int *x,int *y,int *z)//采用地址传递
{
if(*x<*y)swap(&x,&y);//传递的是指针的地址了
else;
if(*x<*z)swap(&x,&z);
else;
if(*y<*z)swap(&y,&z);
printf("%d %d %d\n",*x,*y,*z);
}
main(){
int x1,y1,z1;

scanf("%d%d%d",&x1,&y1,&z1);
sswap(&x1,&y1,&z1);
printf("%d%d%d",x1,y1,z1);
getch();
}

呵呵,你给子函数的实参是值,不是地址吧!
子函数的值改变不会影响主函数的值!