教案C语言.doc_第1页
教案C语言.doc_第2页
教案C语言.doc_第3页
教案C语言.doc_第4页
教案C语言.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

郑州信息科技职业学院教案授课题目:数组的指针表示和指针数组第十二讲:数组的指针表示和指针数组课时数:2教学目的与教学要求: 1、掌握C语言中数组的指针表示方法; 2、掌握C语言中指针数组的定义和使用。 主要内容:1、一维数组的指针表示;2、数组做函数参数时的指针表示;3、字符数组的指针表示;4、二维数组的指针;5、二维数组的不同指针表示方法;6、指向数组行的指针的使用。重点和难点: 1、数组做函数参数时的指针表示;2、二维数组的不同指针表示方法。教学方法和手段教具多媒体演示和板书相结合授课内容: 本讲为补充知识第八章(原第八章改为第九章) 指针8、3 数组的指针和指向数组的指针变量数组:相同类型元素构成的有序序列。数组元素的指针:数组元素的地址就是数组元素的指针。数组的指针:数组的地址指的是数组的起始地址(首地址),也就是第一个数组元素的地址。8、3、1指向数组的指针变量(指向数组元素的指针变量)1、指向数组的指针变量:存放数组元素地址(初始时一般为数组首地址)的变量,称为指向数组的指针变量(简称:数组的指针变量)。2、数组的指针变量的定义和初始化:说明:(1) 数组的指针变量的定义与数组元素的指针变量的定义相同。实质就是基类型指针变量的定义。例如:int a10,*p; 定义了一个整型数组a,如果需要定义指向该数组的指针变量就要定义一个整型指针变量p。(2) 数组的指针变量的初始化可以用两种方法:l 定义时初始化,可以使用已经定义的数组的数组名来初始化数组的指针变量。l 通过赋值初始化,将数组的首地址赋值给数组的指针变量(数组的指针变量的赋值也与一般的指针变量的赋值相同)。例如:int a10,*p; 定义了一个整型数组a,一个整型指针变量p。p=a; 或者p=&a0; 将数组a的首地址赋值给整型变量p,此时p就是指向数组的指针变量。也可以:int a10,*p=a; 在定义数组的指针变量p的同时初始化指向已经定义的数组a。8、3、2通过指针(数组的指针、数组的指针变量)引用数组元素1、 指针p+i的含义(复习):不是地址值p增加i个字节后的地址值,而是指p向后移动i个基类型元素后的地址值。p-i,p+,p-都有类似的含义。2、 指针与数组的关系数组元素在内存中连续存放,如果指针p指向数组a,那么,p+i指向数组a的第i个元素ai。也就是p+i=&ai,此时对ai的访问完全可以转化为对*(p+i)的访问。数组与指针的关系:数组元素可以用下标访问也可以使用指针访问。3、通过指针引用数组元素前面的章节都是通过下标(索引)来访问数组元素的,数组元素的访问还可以通过指针完成。(1) 数组元素的地址表示。假如:p定义为指向数组a的指针。数组元素ai的地址可以表示为:&ai,p+i,a+i。(2) 数组元素的访问例如:数组元素ai的访问可以是:ai,*(p+i),*(a+i)。(3) 数组指针变量,数组名在许多场合甚至可以交换使用。字符数组假如:p=a,那么ai甚至可以表示为pi(指针变量带下标)注意:(1)数组名,数组指针变量使用时的区别:数组名是常量指针,它指向数组首地址,数组指针变量是变量,它的值可以改变。在不至于混淆的场合,数组名,数组指针变量可以统称数组指针。例如:假设a、b是数组名,p是同类型的数组指针变量。a+; *(a+); a=a+i; a=b; 错误而p+; *(p+); p=p+i; p=a;都是可以的。小结:引用数组元素可以采用两种方法:(假设p=a)(1) 下标法:通过数组元素的序号(索引)来访问数组元素。如ai或pi。(2) 指针法:通过数组元素的地址访问数组元素。如*(a+i),*(p+i)注意:使用数组的指针变量,如果改变了其值,那么应当关注其当前指向的位置。必要时可以重置指针。8、3、3数组名作为函数参数函数部分已经介绍数组可以作为函数的参数(形参,实参),当时没有学习指针,只是将数组当作传址调用的例子介绍。数组指针作为函数参数可以分为4种情况:(1) 形参、实参都是数组名(前面都是这么用的,不再介绍)(2) 实参是数组名,形参是指针变量(3) 形参、实参都是指针变量(4) 实参是指针变量,形参是数组名总之,数组作为函数参数时,不管参数是数组还是指针,只是接口形式不同,数组元素可以使用下标表示,也可以使用指针表示。8、3、4字符串的指针和指向字符串的指针变量1、字符串的表示形式。C语言允许使用两种方法实现一个字符串的引用。(字符数组、字符指针)。(1)字符数组将字符串的各个字符(包括结尾标志0)依次存放到字符数组中,利用数组名或下标变量对数组进行操作。例:字符数组应用main()char string=”I am a student.”;printf(“%sn”,string); /* 整体输出 */printf(“%c,%cn”,string3,*(string+3); /* 输出其中一个字符 */运行:I am a student.m,m(2)字符指针可以不定义字符数组,直接定义指向字符串的指针变量,利用指针变量对字符串进行操作。main()char *string=”I am a student.”;printf(“%sn”,string); /* 整体输出 */printf(“%c,%cn”,string3,*(string+3); /* 输出其中一个字符 */字符指针运行:I am a student.m,m2、字符数组和字符指针的区别。(实际上就是数组与指针的区别)字符数组和字符(串)指针都能够实现对字符串的操作,但它们是有区别的:(1) 存储方式的区别字符数组由若干元素组成,每个元素存放一个字符。字符指针存放的是地址(字符数组的首地址),不是将整个字符串放到字符指针变量中。(2) 赋值方式的区别对字符数组只能对各个元素赋值,不能将一个常量字符串赋值给字符数组(字符数组定义例外)。可以将一个常量字符串赋值给字符指针,但含义仅仅是将常量串首地址赋值给字符指针。例如:不允许:char str100; str=”I am a student.”;允许:char *pstr; pstr=”I am a student.”;(3) 定义方式的区别定义数组后,编译系统分配具体的内存单元(一片连续内存空间),各个单元有确切的地址。定义一个指针变量,编译系统只分配一个2字节存储单元,以存放地址值。也就是说字符指针变量可以指向一个字符型数据(字符变量或字符数组),但是在对它赋以具体地址前,它的值是随机的(不知道它指向的是什么)。所以字符指针必须初始化才能使用。例如:允许:char *s10; gets(s);不允许char *ps; get(ps); /* 尽管可能也可以使用,但是这是很危险的 */(4) 运算方面的区别指针变量的值允许改变(+,-,赋值等),而字符数组的数组名是常量地址,不允许改变。8、3、5指向二维数组的指针和指针变量、 二维数组的地址(分析)指针和地址密切相关,要清楚地理解数二维组指针,必须对二维数组地址首先应该有清晰的认识。假设一个二维数组int S34。S数组是一个3x4(3行4列)的二维数组。可以将它想象为一个矩阵(图1)。各个数组元素按行存储,即先存储s0行各个元素(s00,.s03),再存储s1行各个元素(s10,.s13),最后存储s2行各个元素(s20,.s23)。二维数组S可以看成由一维数组作为数组元素的数组:如果将每一行数组元素作为一个整体,那么S数组可以看作为一个一维的数组(图2)。在这个一维数组中每个数组元素表示为:s0,s1,s2。一维数组s的每个数组元素s0,s1,s2本身不是数值,它们又分别是三个一维数组(图3),这三个一维数组的数组名分别是s0,s1,s2。根据一维数组地址、指针的概念可以知道:s是元素为行数组的一维数组的数组名, 就是说s是元素为行数组的一维数组的首地址。s+i即就是元素为行数组的一维数组的第i个元素的地址,即:*(s+i)=si。.(1) 同理:si(i=0-2)是第i个行数组的数组名,si+j就是第i个行数组中第j个元素的地址。也就是说,二维数组任何一个元素sij的地址可以表示为:si+j,就是说二维数组任何一个元素sij=*(si+j).(2)综合(1)(2)两个式子:二维数组任何一个元素sij的地址可以表示为:&sij=si+j=*(s+i)+j.(3)二维数组任何一个元素可以表示为:sij=*(si+j)=*(*(s+i)+j).(4)事实上:sij 还可以表示为:*(s+i)j,*(&s00+m*i+j) (m列数)、 指向多维数组的指针变量(1) 指向数组元素的指针变量(数组基类型指针变量)例:用指向元素的指针变量输出数组元素的值。main()int a34=0,2,4,6,1,3,5,7,9,10,11,12;int *p;for(p=a0; pa0+12; p+)&a00 if(p-a0)%4=0)printf(“n”); printf(*p);例:用指向元素的指针变量输出数组元素a12的值。(补充)main()或者:p=a0;n=i*m+j;printf(*(p+n)int a34=0,2,4,6,1,3,5,7,9,10,11,12;int *p;int i=1,j=2,m=4; /* m-col */p=a0+i*m+j;printf(*p);(2) 指向由m个元素组成的一维数组的指针变量(指向一维数组的指针变量,行指针变量)定义格式:基类型 (*p)m;说明:指

温馨提示

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

评论

0/150

提交评论