1.你这个sort函数的形参是值传递,在sort函数里面改变n1和n2的值,并不会影响主函数里面的n1和n2的值,需要使用指针传递。
2.你这个格式也有点小问题,我给你改好了在下面。
#include <stdio.h>
void sort(int *a,int *b){
int t;
if( *a > *b){
t=*a;
*a=*b;
*b=t;
}
}
int main(){
int n1,n2;
scanf("%d%d",&n1,&n2);
sort(&n1,&n2);
printf("%d,%d",n1,n2);
return 0;
}
第7行加大括号
sort函数不能实现数据交换,修改如下:
void sort(int *a,int *b)
{
int t;
if(*a>*b)
{
t=*a;
*a = *b;
*b = t;
}
}
在函数传参的时候会发生一次值的复制,就像这里的sort函数,会定义两个新的变量a和b来接收传入的5和4,所以sort函数中实际操作的是a和b的值,a和b跟main函数中的n1和n2拥有不同的地址,所以sort函数中的操作对n1和n2没有影响。但是如果sort函数传入的是变n1和n2的地址,那么通过操作指针指向的内存来操作的话,就可以改变n1和n2的值。
所以可以把sort函数改成sort(int *a, int *b)。另外,你sort函数if和else下面的语句需要用{}扩起来,代码修改如下:
#include <stdio.h>
int sort(int *a,int *b)
{
int t;
if(*a > *b)
{
t = *a;
*a = *b;
*b = t;
}else //else可以不写
{
*a = *a;
*b =*b;
}
return 0;
}
int main()
{
int n1,n2;
scanf("%d%d",&n1,&n2);
sort(&n1,&n2); //调用的时候加&符号取地址
printf("%d,%d",n1,n2);
return 0;
}
sort(n1,n2);
这个只是把n1,n2的值复制了给sort,执行后并不会改变n1,n2值
C语言参数那一节应该会讲到这个
你这种情况应该用指针