分类: C/C++
2008-05-29 13:51:59
C语言 指针学习笔记 2
Author:yuexingtian
Date:Thursday May 29, 2008
将数组a中n个数按相反的顺序排列,算法为a[0]与a[n-1]对换,a[1]与a[n-2]对换依此类推……直到a[(n-1)/2]与a[n-int((n-1)/2)]对换,可以用for循环处理此问题,设两个位置指示变量i , j,i的初值为0,j的初值为n-1。然后再将a[i]与a[j]对换,然后再使i的值增加1,j的值减去1,再将a[i]与a[j]交换,直到i=(n-1)/2为止:
/*数组名作函数参数*/ /*将数组a中n个数按相反的顺序排列*/ void inv(int x[],int n) /*形参x是数组名*/ { int temp,i,j,m=(n-1)/2; for(i=0;i<=m;i++) { j=n-1-i; temp=x[i];x[i]=x[j];x[j]=temp; } return; } main() { int i,a[10]={3,7,4,6,8,9,10,5,8,13}; printf("The original array:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); inv(a,10); /*调用inv函数*/ printf("The array has been inverted:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); getch(); } |
测试结果:
对上例可以做一些改动:将函数inv中的形参x改成指针变量,只需改动函数inv就行了。
如下:
void inv(int *x,int n) /*形参x为指针变量*/ { int *p,temp,*i,*j,m=(n-1)/2; i=x;j=x+n-1;p=x+m; for(;i<=p;i++,j--) { temp=*i;*i=*j;*j=temp; } return; } main() { int i,a[10]={3,7,4,6,8,9,10,5,8,13}; printf("The original array:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); inv(a,10); printf("The array has been inverted:\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); getch(); } |
运行结果与前一个程序一样!