版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指针数组CONTENTS
目录提出问题引入新课自主学习明确考点案例分析交流提升仿真演练体验探索提出问题引入新课PART01回顾:1、数组指针的定义、赋值与引用?2、数组指针有什么要点?3、数组指针与数组之间有什么关联?思考:在C语言中,使用数组使编写的程序简洁、明了,但对于一些数据长度不一致的数据,我们如何定义数组呢?提出问题引入新课自主学习明确考点PART02一个数组,如果它的元素都是指针型,则称为指针数组。即数组的元素都是指针变量。一维指针数组的定义形式为: 类型名*数组名[数据长度];例如: int*p[4];由于[]比*的优先级高,因此p先与[]结合,形成p[4]形式,这显然是数组形式,它有四个元素,其元素的类型是整型指针。考点一:指针数组的定义说明:在书写时,要注意int(*p)[4]和int*p[4]的区别。原理:区分两者的优先级别(1)用指针数组元素分别指向二维数组的每一行,通过指针数组元素控制对二维数组每一行元素的操作。结指针元素赋值的格式是:<指针数组名>[下标]=<二维数组名>[行下标];考点二:指针数组的赋值与使用【例1】通过指针数组对二维数组的元素进行输出操作#include<stdio.h>main(){inta[3][3]={1,2,3,4,5,6,7,8,9},*pa[3];int*p=a[0];/*定义指针指向每行元素的值*/inti;for(i=0;i<=2;i++)pa[i]=a[i];//指针数组元素分别指向每一行for(i=0;i<3;i++)printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));for(i=0;i<3;i++)printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));}说明:pa是一个指针数组,三个元素分别指向二维数组a的各行的首地址。然后用循环语句输出指定的数组元素。其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由于p与a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。(2)用于对多个字符串的处理,让每个数组元素指向一个字符串常量,或指向存放字符串的字符数组,每个指针数组元素就可以代表一个字符串进行整串的操作。对指针数组元素赋值的格式是:考点二:指针数组的赋值与使用<指针数组名>[<下标>]=<字符串常量或字符数组名>;考点二:指针数组的赋值与使用【例2】有若干个字符串,输出其中最长的字符串。
#include<string.h>main(){char*p[]={"teacher","book","pascal","hello","and","computerdesign"};char*q;inti;q=p[0];for(i=1;i<6;i++)if(strlen(p[i])>strlen(q))q=p[i];printf("%s\n",q);}运行结果为:computerdesign说明:程序中用指针变量q记录最长字符串的地址。考点二:指针数组的赋值与使用【例3】有若干长度不等的字符串,请按字母顺序输出(由小到大)。
#include<string.h>main(){char*p[]={"teacher","book","pascal","hello","and","me"};intn=6,i,j,k;char*temp;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++) if(strcmp(p[k],p[j])>0) k=j; if(k!=j) {temp=p[k];p[k]=p[i];p[i]=temp; }}for(i=0;i<n;i++) printf("%s\n",p[i]);}案例分析交流提升PART03【【例1】若有语句:char*line[5];,以下叙述中正确的是()A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组C)定义line是一个指针数组,语句中的*号称为间址运算符D)定义line是一个指向字符型函数的指针【例2】有以下程序运行后的输出结果是()main(){charch[3][4]={”123”,”456”,”78”},*p[3];inti;for(i=0;i<3;i++)p[i]=ch[i];for(i=0;i<3;i++)printf("%s",p[i]);}A)123456780B)12345678C)12345678D)147【例3】有以下程序运行后的输出结果是()main(){char*p[]={“BOOL”,”OPK”,”H”,”SP”};inti;for(i=3;i>=0;i--,i--)printf("%c",*p[i]);printf("\n");}【例4】有以下程序运行后的输出结果是()#include<stdio.h>main(){inta[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;pa=a;for(i=0;i<3;i++)if(i<2)pa[1][i]=pa[1][i]-1;elsepa[1][i]=1;printf("%d\n",a[0][1]+a[1][1]+a[1][2]);}A)7B)6C)8D)无确定值仿真演练,体验探索PART041、写出以下程序运行后的输出结果是()main(){char*s[]={“one”,”two”,”three”},*p;p=s[1];printf(“%c,%s\n”,*(p+1),s[0]);}A)n,twoB)t,oneC)w,oneD)o,two2、读程序写结果main(){inta[3][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8}};inti;int(*p)[4]=a,*q=a[0];for(i=0;i<3;i++){if(i==0)(*p)[i+i/2]=*q+1; else p++,++q;}for(i=0;i<3;i++)printf("%d,",a[i][i]);printf("%d,%d\n",*((int*)p),*q);}3、分析下列程序的运行结果是()main(){charc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论