|
|
发表于 2011-7-28 23:59:18
|
显示全部楼层
- #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;
- }
复制代码 希望你能看的明白,估计是指针把你指晕了
|
|