嵌套调用实现数组元素逆序存放
主函数调用reverse_array(int ptr[],int cnt)函数,该函数在调用inplace_swap(int *x,int *y)函数时,把两个不同的地址送给inplace_swap(int *x,int *y)函数,实现这两个位置处元素的交换。
令*x=a,*y=b
则*y= *x^*y执行后,*x=a,*y=a^b.
然后,*x= *x^*y执行后,*x=a^(a^b)=b,*y=a^b.
最后,*y= *x^*y执行后,*x=b,*y=b^(a^b)=a.
两个不同位置处的数实现交换。
源程序
void reverse_array(int ptr[],int cnt);
void inplace_swap(int *x,int *y);
void main()
{
int array[]={1,2,3,4,5,6,7};
int cnt=sizeof(array)/sizeof(array[0]);
reverse_array(array,cnt);
}
void reverse_array(int ptr[],int cnt)
{
int first,last;
for(first=0,last=cnt-1;first<last;first++,last--)
inplace_swap(&ptr[first],&ptr[last]);
}
void inplace_swap(int *x,int *y)
{
*y= *x^*y;
*x= *x^*y;
*y= *x^*y;
}
当然,把inplace_swap(int *x,int *y)的函数体放在reverse_array(int ptr[],int cnt)中,整体结构就会简单一些,但reverse_array(int ptr[],int cnt)函数的功能就复杂一些。