#include<stdio.h> //这个就不解释了
main() //主函数
{
void inv (int*x,int n); //定义翻转函数 inv
int i,a[10]={3,7,9,11,0,6,7,5,4,2}; //定义变量i 数组a[]
printf("The original array:\n"); //不解释
for (i=0;i<10;i++) //循环 目的 依次打印当前数组的每一个数 当前为原始数组
printf("%d ",a[i]);
printf("\n");
inv(a,10); //调用翻转函数 iva(a,10) a表示数组a[10]的第一个位置相当于a[0]的位置,10表示长度
printf("The array has been inverted:\n");//不解释
for(i=0;i<10;i++) //循环 目的 依次打印当前数组的每一个数 当前数组为翻转后的数组
printf("%d",a[i]);
printf("\n");
}
void inv(int *x,int n ) //翻转函数
{
int *p,temp,*i,*j,m=(n-1)/2;
/*定义指针p 零时变量temp 指针i 指针j 整个数组的中间位置m,因为翻转前一半和后一半交换就可以了*/
i=x;j=x+n-1;p=x+m;
/*把a[10]数组的第一个位置也就是a[0]的位置给i,估计你这里不明白,我详细解释下,调用函数是inv(a,10),所以这里的*x==a[0],x等于a[0]所在的位置也就是第0号位,用指针指向a[0]的位置,就是a[0]的值也就是*x,把x的值赋给i也就是把a[0]的位置赋给i,正确的理解应该是把数组的首地址传给了i,之后i=0,*i=a[0],i=1,*i=a[1]依此类推,不解释了,j也一样,只是指向的是最后一个位置,p中间位置,不用再过多解释了吧*/
for(;i<=p;i++,j--) //算法很简单了,就是最简单的用零时变量存放数据,进行交换,好像没有什么好解释的了
{
temp=*i;*i=*j;*j=temp;
}
return;
}
希望你能看的明白,估计是指针把你指晕了