#include<stdio.h>
void SWAP(int *a,int *b)
{int *e;
e=a;
a=b;
b=e;
}
void main()
{int i;
int A[2]={0,1};
SWAP(&A[0],&A[1]);
printf("the sorted num is:\n");
for(i=0;i<2;i++)
printf("A[%d]=%2d\n",i,A[i]);
}
我们知道交换两个整数的地址可以交换两个整数的值。但是在数组中我们交换两个数组元素的地址它的输出结果会是A[0]=1,A[1]=0吗?答案是否定的。
原因
数组的实质是一段连续分配的指针,如果你定义了 int a[2]那么变量 a 就是指向开头的指针,a+1 即下一个,依此类推取元素值的操作 a[n] 实际上就是 *(a+n) 所以就算你真的“交换”了,a[n]的值还是不会变。
正确的代码
void SWAP(int *a,int *b)
{int e;
e=*a;
*a=*b;
*b=e;
}
输出结果