很郁闷的例子,看了2天才看懂。可能我比较笨,特此谨记以免忘记。
#include
"
stdio.h
"
void inv( int * x, int n)
... {
int *p,m,temp,*i,*j;
m=(n-1)/2; //得到中间值,此例m=4
i=x;
j=x+n-1;
p=x+m; //控制后面转换次数。p[4] 。当指针i指向地址与*p指向地址一样时候结束循环。
for(;i<=p;i++,j--) //p[4].也就是控制转换为5次,第一次是 arr[0]和arr[9],第二次是arr[1]和arr[8]。
//当循环到arr[4]和arr[5]转换之后循环结束,正好转换5次。
...{
temp=*i;
*i=*j;
*j=temp;
}
return;
}
void main()
... {
int i,arr[10],*p=arr;
printf("The original array: ");
for(i=0;i<10;i++,p++)
scanf("%d",p);
printf(" ");
p=arr;
inv(p,10);
printf("The array has been inverted: ");
for(p=arr;p<arr+10;p++)
printf("%d",*p);
printf(" ");
}
void inv( int * x, int n)
... {
int *p,m,temp,*i,*j;
m=(n-1)/2; //得到中间值,此例m=4
i=x;
j=x+n-1;
p=x+m; //控制后面转换次数。p[4] 。当指针i指向地址与*p指向地址一样时候结束循环。
for(;i<=p;i++,j--) //p[4].也就是控制转换为5次,第一次是 arr[0]和arr[9],第二次是arr[1]和arr[8]。
//当循环到arr[4]和arr[5]转换之后循环结束,正好转换5次。
...{
temp=*i;
*i=*j;
*j=temp;
}
return;
}
void main()
... {
int i,arr[10],*p=arr;
printf("The original array: ");
for(i=0;i<10;i++,p++)
scanf("%d",p);
printf(" ");
p=arr;
inv(p,10);
printf("The array has been inverted: ");
for(p=arr;p<arr+10;p++)
printf("%d",*p);
printf(" ");
}