c语言教案第17讲_第1页
c语言教案第17讲_第2页
c语言教案第17讲_第3页
c语言教案第17讲_第4页
c语言教案第17讲_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、第十七讲 指针与数组,教学目的与要求: 掌握一维数组、二维数组的指针表示法 掌握用指针引用字符串 教学内容提要: 1.指针与二维数组 2.指针与字符串 教学重点:指针与二维数组、指针与字符串 教学难点:指针与二维数组 教学进度:P220P232 教学过程:,一、指针与二维数组,1.二维数组的地址 设有一个二维数 组a,它有三行四列: int a34; 数组名a: 代表整个二维数组的首地址,也就是第0行的首地址。 a+i: 代表第i行的首地址。(见下页图),数组名a代表整个二维数组的首地址:,上图 a数组包含三个元素:a0,a1,a2. 而每个元素又 是一个一维数组,它包含4个元素(即4个列元素

2、), 如:a0又包含:a00,a01,a02,a03.,一维数组名ai: 代表第i 行的首地址,即第i行中第0列元素的地址(既 int k,j,*p; for (j=0;j2;j+) /* 方式1 */ for (k=0;k3;k+) printf(%5d,*(aj+k); /* aj是j行首地址,aj+k是j行k列元素的地址*/ putchar(n); putchar(n);,接上页:,for (j=0;j2;j+) /* 方式2 */ for (k=0;k3;k+) printf(%5d,*(*(a+j)+k); /* *(a+j)是j行首地址,*(a+j)+k是j行k列元素的地址*/ p

3、utchar(n); p=a; /* p指向数组的第一个元素 */ for (j=0;j2;j+) /* 方式3 */ for (k=0;k3;k+) printf(%5d,*(p+); /* 输出p所指示的元素 */ putchar(n); ,输出的结果是: 0 3 4 5 0 3 4 5 0 3 4 5,2.指向二维数组的指针变量 有两种情况:一是直接指向数组元素的指针变量; 二是指向一个含有m个元素的一维数组。 这两种不同形式的指针变量,其使用方法不同。 指向数组元素的指针变量,即简单指针变量,如: int *p,a34; p=,注意: (1)int (*p)4; 定义一个指针变量p ,

4、p 指向包含4个元素的一维数组。 (2)p+i与 *(p+i)的区别: p+i是指向第i行的指针(第i行的首地址); *(p+i)是指向第i行第1个元素的地址; 两者数值相等,但含义不同:p+i 的增值将以行长为单位,而*(p+i)增值将以元素长度为单位。,即:p+i+1将指向第i行再下一行的首地址,而*(p+i)+1将指向第i行首元素的下一个元素地址。(见下图) 设 int a34,(*p)4; p=a;,如果p先指向a0,则p+1不是指向a01,而是指向a1,例 main( ) static int a34=1,3,5,7,9,11,13,15,17,19,21,23; int (*p)4

5、,i,j; p=a; scanf(i=%d,j=%d, ,main() int a34=1,2,3,4,3,4,5,6,5,6,7,8; int i; int (*p)4=a,*q=a0; for(i=0;i3;i+) if(i=0) (*p)i+i/2=*q+1; else p+,+q; for(i=0;i3;i+) printf(%d,aii); printf(%d,%dn,*(int *)p),*q); ,运行结果:2,4,7,5,3,2,例 二维数组与指针运算,二. 指针与字符串,1. 字符串的表示形式 用字符数组实现(已学过): main( ) static char string

6、=I Love China!; printf(%sn,string); 运行时输出:I Love China!,跟我来!,用字符指针实现: 字符指针变量的定义:char *p ; 赋值: 指针=串中某一字符地址;,跟我来!,例如 main( ) char *s=“I Love China!” ; (初始化s),例: 用字符数组实现,例 main( ) char string=“I love China!”; printf(“%sn”,string); printf(“%sn”,string+7); ,例 main( ) char *string=“I love China!”; printf(

7、“%sn”,string); string+=7; while(*string) putchar(string0); string+; ,字符指针初始化:把字符串首地址赋给string char *string; string=“I love China!”;,*string!=0,用字符指针实现,char *cp; 与 char str20; str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址 char str20; str=“I love China!”; () char *cp; cp=“I love China!”; () str是地址常量;cp是地址变量 cp接受键入

8、字符串时,必须先开辟存储空间,例 char str10; scanf(“%s”,str); () 而 char *cp; scanf(“%s”, cp); (),改为: char *cp,str10; cp=str; scanf(“%s”,cp); (),字符指针变量与字符数组,例1:将一个已知字符串第n个字符开始的剩余字符复制到另一个字符串中.,跟我来!,2. 应用举例,main() char a80,b80,*p,*q; int n,k;,定义,puts(b); ,gets(a); scanf(“%d”,输入已知字符串和n,p=a; q=b; p+=n-1;,指针p定位到第n个字符,whi

9、le(*p!=0) *q=*p; q+;p+; ,拷贝实际字符,*q=0;,字符串加结束标记,三、指针数组 指针数组:是指针变量的集合。即它的每一个元素都是指针变量,且都具有相同的存储类别和指向相同的数据类型。 指针数组的定义形式为: 类型标识符 *数组名数组长度说明; 例如: int *p10; p为10个元素的数组,它的各元素都是一个整型变量的指针。,例 一个指针数组的元素指向整型数据的简单例子。 main() static int a5=1,3,5,7,9; int *num5= ,指针数组广泛应用于对字符串的处理 例如有定义: char *p3; 定义了一个具有三个元素p0,p1,p2

10、的指针数组。每个元素都可以指向一个字符数组,或字符串。 若利用数组初始化,则: char *p3= “Basic”, “c+”, “pascal”; P0指向字符串“Basic”; P1指向字符串“c+”; P2指向字符串“pascal” ;,char name59=“gain”,“much”,“stronger”, “point”,“bye”;,char *name5=“gain”,“much”,“stronger”, “point”,“bye”;,二维数组存储空间固定 字符指针数组相当于可变列长的二维数组 分配内存单元=数组维数*2+各字符串长度,指针数组元素的作用相当于二维数组的行名 但指针数组中元素是指针变量 二维数组的行名是地址常量,二维数组与指针数组区别:,char *name=“Follow me”,“BASIC”, “Great Wall”,“FORTRAN”,“Computer Design; name是指针数组,元素均

温馨提示

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

评论

0/150

提交评论