Chinaunix首页 | 论坛 | 博客
  • 博客访问: 373041
  • 博文数量: 57
  • 博客积分: 4020
  • 博客等级: 上校
  • 技术积分: 647
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-17 15:57
文章分类

全部博文(57)

文章存档

2009年(22)

2008年(35)

我的朋友

分类: C/C++

2008-05-29 13:51:59

C语言 指针学习笔记 2

                                                                       Author:yuexingtian

                                                                       Date:Thursday May 29, 2008

将数组an个数按相反的顺序排列,算法为a[0]a[n-1]对换,a[1]a[n-2]对换依此类推……直到a[(n-1)/2]a[n-int((n-1)/2)]对换,可以用for循环处理此问题,设两个位置指示变量i , j,i的初值为0j的初值为n-1。然后再将a[i]a[j]对换,然后再使i的值增加1j的值减去1,再将a[i]a[j]交换,直到i=(n-1)/2为止:

/*数组名作函数参数*/

/*将数组an个数按相反的顺序排列*/

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();

}

运行结果与前一个程序一样!

 
 
 
阅读(1341) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~