指针数组实例.doc_第1页
指针数组实例.doc_第2页
指针数组实例.doc_第3页
指针数组实例.doc_第4页
指针数组实例.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2011 SD2.0大会门票社区团购火爆进行中800元最低价仅限7天! 参加浏览器性能挑战赛免费去美国!指针数组分类: C/C+程序设计2007-12-30 01:56241人阅读评论(0)收藏举报前面介绍了指向不同类型变量的指针的定义和使用,我们可以让指针指向某类变量,并替代该变量在程序中使用;我们也可以让指针指向一维、二维数组或字符数组,来替代这些数组在程序中使用,给我们在编程时带来许多方便。下面我们定义一种特殊的数组,这类数组存放的全部是指针,分别用于指向某类的变量,以替代这些变量在程序中的使用,增加灵活性。指针数组定义形式:类型标识*数组名数组长度例如: char *str4;由于 比*优先权高,所以首先是数组形式str4 ,然后才是与“*”的结合。这样一来指针数组包含4个指针s t r 0 、s t r 1 、s t r 2 、s t r 3 ,各自指向字符类型的变量。例如: int *p t r 5 ;该指针数组包含5个指针p t r 0 、p t r 1 、p t r 2 、p t r 3 、p t r 4 ,各自指向整型类型的变量。例6-22 针对指针数组的应用,我们分别用指针数组的各指针指向字符串数组、指向一维整型数组、指向二维整型数组。#include #include m a i n ( )char *ptr14=china,chengdu,sichuang,chongqin;/* 指针数组p t r 1 的4个指针分别依此指向4个字符串* /int i,*ptr23,a3=1,2,3,b32=1,2,3,4,5,6;for(i=0;i4;i+)printf(/n%s,ptr1i);/依*此输出ptr1数组4个指针指向的4个字符串*/printf(/n);for(i=0;i3;i+)ptr2i=&ai;/*将整型一维数组a的3个元素的地址传递给指针数组ptr2*/for(i=0;i3;i+)/*依此输出ptr2所指向的3个整型变量的值*/printf(%4d,*ptr2i);printf(/n);for(i=0;i3;i+)ptr2i=bi;/*传递二维数组b的每行首地址给指针数组的4个指针*/for(i=0;i0、=0、0分别表示串 str1大于str2、str1等于str2、str1小于str2。再利用strcpy()函数实现两个串的复制。下面选用冒泡排序法。#include#include#includemain()char*ptr14,str420,temp20;/*定义指针数组、二维字符数组、用于交换的一维字符数组*/inti,j;for(i=0;i4;i+)gets(stri);/*输入4个字符串*/printf(/n);for(i=0;i4;i+)ptr1i=stri;/*将二维字符数组各行的首地址传递给指针数组的各指针*/printf(original string:/n);for(i=0;i4;i+)/*按行输出原始各字符串*/printf(%s/n,ptr1i);printf(ordinal string:/n);for(i=0;i3;i+)/*冒泡排序*/for(j=0;j0)strcpy(temp,ptr1j);strcpy(ptr1j,ptr1j+1);strcpy(ptr1j+1,temp);for(i=0;i4;i+)/*输出排序后的字符串*/printf(%s/n,ptr1i); 程序中一定要注意指针的正确使用。一旦将二维字符数组的各行首地址传递给指针数组的各指针,则相当于给指针分配了安全可操作的地址,地址空间大小由二维字符数组来决定。当然也可由编译系统为指针分配地址用于字符串的存放。例6-24利用malloc()函数为指针分配存储空间,实现字符串的排序。#include#include#includemain()char *ptr14,*temp;inti,j;for(i=0;i4;i+)ptr1i=malloc(20);/*为指针数组各指针分配20字节的存储空间*/gets(ptr1i);printf(/n);printf(original string:/n);for(i=0;i4;i+)printf(%s/n,ptr1i);printf(ordinal string:/n);for(i=0;i3;i+)for(j=0;j0)temp=ptr1j;/*利用指向字符串的指针,进行指针地址的交换*/ptr1j=ptr1j+1;ptr1j+1=temp;for(i=0;i4;i+)/*字符串输出*/printf(%s/n,ptr1i);运行程序,其结果与上述例6-23完全相同。例6-25对已排好序的字符指针数组进行指定字符串的查找。字符串按字典顺序排列,查找算法采用二分法,或称为折半查找。折半查找算法描述: 1.设按开序(或降序)输入n个字符串到一个指针数组。2.设low指向指针数组的低端,high指向指针数组的高端,mid=(low+high)/23.测试mid所指的字符串,是否为要找的字符串。4.若按字典顺序,mid所指的字符串大于要查找的串,表示被查字符串在low和mid之间,否则,表示被查字符串在mid和high之间。5.修改low式high的值,重新计算mid,继续寻找。#include#include#include#includemain()char*binary();/*函数声明*/char*ptr15,*temp;inti,j;for(i=0;i5;i+)ptr1i=malloc(20);/*按字典顺序输入字符串*/gets(ptr1i);printf(/n);printf(original string:/n);for(i=0;i5;i+)printf(%s/n,ptr1i);printf(input search string:/n);temp=malloc(20);gets(temp);/输*入被查找字符串*/i=5;temp=binary(ptr1,temp,i);/*调用查找函数*/if(temp)printf(succesful-%s/n,temp);elseprintf(nosuccesful!/n);return;char *binary(char *ptr,char *str,int定n)义返回字符指针的函数*/*折半查找*/inthig,low,mid;low=0;hig=n-1;while(low=hig)mid=(low+hig)/2;if(strcmp(str,ptrmid)0)low=mid+1;else return(str);/*查帐成功,返回被查字符串*/return NULL; / *查找失败,返回空指针* /例6-26 在一个已排好序的字符串数组中,插入一个键盘输入的字符串,使其继续保持有序。在上述程序查找成功的基础上,我们将该字符串插入到字符数组中。插入的位置可以是数组头、中间或数组尾。查找的算法采用折半算法,找到插入位置后,将字符串插入。#include #include #include #include m a i n ( )int binary(); / *查找函数声明* /void insert(); / *插入函数声明* /char *temp,*ptr16;int i,j;for (i=0;i5;i+) ptr1i=malloc(20);/*为指针分配地址后*/gets(ptr1i);/*输入字符串*/ptr15=malloc(20);printf(/n);printf(original string:/n);for(i=0;i5;i+)/*输出指针数组各字符串*/printf(%s/n,ptr1i);printf(input search string:/n);temp=malloc(20);gets(temp);/*输入被插字符串*/i=binary(ptr1,temp,5)/*;寻找插入位置i*/printf(i=%d/n,i);insert(ptr1,temp,5,i);/*在插入位置i处插入字符串*/printf(outputstrings:/n);for(i=0;i6;i+)/*输出指针数组的全部字符串*/printf(%s/n,ptr1i);return;intbinary(char*ptr,char*str,intn)/*折半查找插入位置*/int hig,low,mid;low=0;hig=n-1;if(strcmp(str,ptr0)0)returnn;/*若插入字符串比字符串数组的最后一个大,则应插入字符串数组的尾部*/while(low=hig)mid=(low+hig)/2;if(strcmp(str,ptrmid)0)low=mid+1;else return(mid);/*插入字符串与字符串数组的某个字符串相同*/returnlow;/*插入的位置在字符串数组中间*/void insert(char*ptr,char*str,intn,inti)int j;for

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论