本人初学C语言。
题目是,输入n个正整数,然后从小到大输出。 我想问的是为什么第一个程序无法排序。
#include <stdio.h>
void bubble(int a[],int n);
void swap2(int *,int *);
int main(void)
{
int i,n,a[8];
printf("Enter n(n<=8):");
scanf("%d",&n);
printf("Enter n numbers into a[%d]:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);
printf("After sorted,a[%d]=",n);
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n");
return 0;
}
void bubble(int a[],int n)
{
int i,j,flag;
for(i=1;i<n;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if(a[j]>a[j+1])
{
swap2(&a[j],&a[j+1]);
flag=1;
}
if(flag==0)
break;
}
}
void swap2(int *px,int *py)
{
int *t;
t=px;
px=py;
py=t;
}
下面的这个是可以实现的,只改动一个自定义函数
void swap2(int *px,int *py)
{
int t;
t=*px;
*px=*py;
*py=t;
}
为什么上面的不行啊!! 哪位大神能告诉下原因,感谢!!
非常感谢你的回答。我还有一点没理解到,再帮帮忙吧。当bubble函数里调用swap2函数的时候不是把地址传递给了swap2了吗(相当于px=&a[j];py=&a[j+1];),既然px指向了&a[j],为什么不可以用交换地址的方式达到交换值同样的效果呢?
追答直接使用值传递的情况: