C/C++中利用数组名/指针进行排序实例

2016-02-19 20:22 1 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐C/C++中利用数组名/指针进行排序实例,赶紧看过来吧!

【 tulaoshi.com - 编程语言 】

 
  
    在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。  以下两个例子要非常注重,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址。 !-- frame contents -- !-- /frame contents -- #include stdio.h 
   
  void main(void) 
  { 
   
  void reversal(); 
  static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
  int i; 
  for (i=0;i10;i++) 
  { 
  printf("%d ",a); 
  } 
  printf(""); 
  reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
   
  for (i=0;i10;i++) 
  { 
  printf("%d ",a); 
  } 
  printf(""); 
   
  } 
   
  void reversal(x,n) 
  int x[],n; /* 定义形式参数 */
  { 
  int m=(n-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2) */
  int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
  for (i=0;i=m;i++) 
  { 
  j=n-1-i; /* 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9] */
  temp=x; 
  x=x[j]; 
  x[j]=temp; 
  } 
  } 
   
  /* 次题需要注重的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */
  
  #include stdio.h 
   
  void main(void) 
  { 
   
  void reversal(); 
  static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
  int i; 
  for (i=0;i10;i++) 
  { 
  printf("%d ",a); 
  } 
  printf(""); 
  reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */
   
  for (i=0;i10;i++) 
  { 
  printf("%d ",a); 
  } 
  printf(""); 
   
  } 
   
  void reversal(x,n) 
  int *x,n; /* 定义x为指针变量 */
  { 
  int temp,*p,*i,*j; /* 这里需要注重的是temp用与交换的时候临时存储数据的 */
  i = x; /* 利用指针变量i存储数组a的起始地址 */
  p = x + ((n-1)/2); /* 计算最后一次循环的时候数组a的地址 */
  j = x + n - 1; /* 计算数组a也就是a[9]的结束地址好用于交换 */
  for (;i=p;i++,j--) /* 利用循环和指针进行数组元素值的交换 */
  { 
  temp=*i; /* 用temp临时存储*i也就是循环中a实际的值 */
  *i=*j; 
  *j=temp; 
  } 
  
   } 
   
  /* 此例同样要注重到利用指针进行数组的操作同样改变了实际数组各元素的值 */ 更多内容请看C/C++技术专题  C/C++应用实例专题,或

来源:https://www.tulaoshi.com/n/20160219/1623501.html

延伸阅读
对于数组和多维数组的内容这里就不再讨论了,前面的教程有过说明,这里主要讲述的数组和指针类型的关系,通过对他们之间关系的了解可以更加深入的掌握数组和指针特性的知识! 一个整数类型数组如下进行定义 int a[]={1,2,3,4}; 如果简单写成 a;//数组的标识符名称 这将代表的是数组第一个元素的内存地址,a;就相当于&a...
C#中数组是引用类型,C#定义整型数组方式是:int [] intArray = {1,2,3};或int [] intArray = new int;而C++中定义整型数组的方式是:int intArray[] = {1,2,3};或int * intArray = new int;C#中的数组可以是一维的也可以是多维的,同样也支持矩阵和参差不齐的数组。注意:定义多维数组(矩阵)的方式是[,,]而定义多维“参差矩阵”的方式是[]...
//程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include iostream #include string using namespace std; void print_char(char* array[]);//函数原形声明 void main(void) { char* test[]={"abc","cde","fgh",NULL};//这里添加一个NULL,表示不指向任何地址,值为0 print_char(test)...
揭开C/C++中数组形参的迷雾 作者:乾坤一笑 楔子 去年,周星星大哥曾经在VCKBASE/C++论坛发表过一篇文章“数组引用"以避免"数组降阶”,当时我不能深入理解这种用法的含义;时隔一年,我的知识有几经锤炼,终于对此文章渐有所悟,所以把吾所知作想详细道来,竟也成了一篇文章...
这里的写法,可以避免使用 for 循环,减少栈空间内存的使用和减少运行时的计算开销! #include < iostream     #include < string     using   namespace  std;        void  print_char( char * array[]); //函数原形声明 &nbs...

经验教程

310

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部