C语言一小问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 16:05:40
#include<stdio.h>
void exchange(int,int);
int main()
{
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a>b) exchange(a,b);
if(b>c) exchange(b,c);
if(c>d) exchange(c,d);
if(a>b) exchange(a,b);
if(b>c) exchange(b,c);
if(a>b) exchange(a,b);
printf("%d %d %d %d",a,b,c,d);
getchar();
getchar();
}

void exchange(int i,int j)
{
int e;
e=i;
i=j;
j=e;
}

我刚接触C语言,这个程序要求输入四个数字,再由小到大排序后输出,为什么这个程序输出结果和输入结果一样啊?

你的
void exchange(int i,int j)
{
int e;
e=i;
i=j;
j=e;
}
i 和j 都是局部变量,它们只在exchange()函数内部起作用,并不会对函数外起作用,函数一调用玩,它就释放内存。也就是说你的函数没调用成功。即你的程序相当于:
#include<stdio.h>
void exchange(int,int);
int main()
{
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
printf("%d %d %d %d",a,b,c,d);
getchar();
getchar();
}
如果要按照你的程序的思路,来得出正确的结果的话,程序应为:

#include<stdio.h>
void exchange(int,int);
int main()
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a>b) exchange(&a,&b);
if(b>c) exchange(&b,&c);
if(c>d) exchange(&c,&d);
if(a>b) exchange(&a,&b);
if(b>c) exchange(&b,&c);
if(a>b) exchange(&a,&b);
printf("%d %d %d %d",a,b,c,d);
getchar();
getchar();
}

void exchange(int *i,int *j)
{
int *e;
e=*i;
*i=