C语言知识第9章1-王厚财.doc_第1页
C语言知识第9章1-王厚财.doc_第2页
C语言知识第9章1-王厚财.doc_第3页
C语言知识第9章1-王厚财.doc_第4页
C语言知识第9章1-王厚财.doc_第5页
全文预览已结束

下载本文档

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

文档简介

复习:1指针的定义与赋初值2指针的基类型3指针的运算4指针数组与行指针5指向函数的指针和函数的返回值为指针及指针作函数的参数讲授新课:第9章 指针、数组、函数的进一步讨论9.1 指针与数组一个变量有地址,一个数组包括若干个元素,每个数组元素都在内存中占用不同的存储单元,都有相应的地址。指针变量可以指向变量,当然也可以指向数组元素。9.1.1一维数组与指针1.一维数组名和数组元素的地址(1)一维数组的数组名一个数组是由连续的一块内存单元组成的。在C语言中,数组名就是这块连续内存单元的首地址。定义数组时的类型就是此地址的基类型,数组名是一个地址常量。(2)一维数组的数组元素的地址一个数组也是由各个数组元素组成的。每个数组元素按其数据类型占有连续几个字节的内存空间。一个数组元素的地址就是指它所占有的几个内存字节的首地址。一个数组元素是一个普通的变量,因此,数组元素的地址可以用求地址运算符来求出。也可以通过数组的首地址来表示数组元素的地址。a+i的值即等于ai的地址。 (3)一维数组的数组元素的引用引用数组元素可以采用数组名加一对中括号的方法:即ai来引用a的第i个元素。a+i的值即等于ai的地址,可以采用间接访问运算符来引用元素的值。即*(a+i)就等价于*( &ai ),即等价于ai。2.通过指针来引用一维数组元素(1)用指针来表示一维数组的数组元素的地址值有以下定义: int a5,*p,k;p=a;或p=&a0;指针变量p指向a0,我们可以用p(即p+0)的值即等于a0的地址,p+1的值即等于a1的地址,p+i的值即等于ai的地址。还可以用移动指针的方法来使p指向各个数组元素。for(m=0;m5;m+)scanf(“%d”,p+); /*每循环一次,使p后移,指向下一个元素*/(2)用指针来引用一维数组的数组元素p+i的值即等于ai的地址,可以通过*(p+i)来引用数组元素ai。p是指针变量,指针变量可以移动,可以通过移动指针来引用a数组的每个元素:for(p=a,m=0;m5;m+)printf(“%5d”, *p);p+;则表示数组元素的表达式有以下四种: am *(a+m) *(p+m) pm例9.1 使用不同的方法访问数组元素。#include “stdio.h”main() int a5=1,2,3,4,5,m,*p;for(m=0;m5;m+) printf(“%5d”,am); /*通过数组名加下标的方法*/printf(“n”);for(m=0;m5;m+) printf(“%5d”,*(a+m); /*通过各元素的地址来引用*/printf(“n”);for(m=0;m5;m+) printf(“%5d”,*(p+m); /*通过指针变量p来引用*/printf(“n”);for(m=0;m5;m+) printf(“%5d”, pm); /*通过指针变量加下标的方法*/printf(“n”);for(m=0;m5;m+) printf(“%5d”, *p+); /*通过移动指针,再通过间接访问*/printf(“n”); 注意:如果指针变量不是指向数组的首地址,大家应该注意指针变量加中括号的方法跟数组名加中括号的区别。例如: int a6,*p;p=&a2;如果有以上的定义和赋值语句,再引用p0,此时p指向a2,p0相当于*(p+0),即引用的是a2这个数组元素;引用p1,相当于*(p+1)即a3;以次类推。但应注意:最大只能引用到p3,这时,p已经指到数组a的最后一个元素,再往后已经没有意义了。9.1.2二维数组与指针用指针变量可以指向一维数组中的元素,也可以指向二维数组中的元素。定义:int a34; a+1a+2a0a1a2a00a01a02a03a10a11a12a13a23a22a21a20aa0+1*(a+0)+1a1+1*(a+1)+1a2+1*(a+2)+11.二维数组的地址和数组元素 (1)二维数组是由若干个一维数组组成C语言中是把二维数组当成一个一维数组,这个一维数组的每一个成员又是一个一维数组。二维数组a可以看成是由a0、a1、a2三个元素组成的一维数组,而a0又是一个一维数组,它由四个元素a00、a01、a02、a03组成,a1、a2依次类推。a0、a1、a2是一维数组的数组名, a0、a1、a2是三个地址常量,其值依次为二维数组每行的首地址,它们的基类型就是数组元素的类型整型。a0指向a0这个一维数组的第一个元素a00,而a0+1为a0这个一维数组的第二个元素a01的地址 而a0又是a这个数组的元素,因此a0又可以写成*(a+0),也就是说*(a+0)+1也是指向a01,即*(a+0)+1为a 01的地址。同理,ak又可以写成*(a+k)都是第k行的首地址。(2)二维数组名二维数组a包括三个元素a0、a1、a2,因此数组名a同样也是一个存放地址常量的指针。数组名a的基类型是它的数组元素(a0、a1、a2)的类型是有四个整型元素的一维数组,因此,数组名a的基类型也是具有四个整型元素的数组类型。a+0、a+1、a+2,这里的0、1、2代表的是一行,即4*2个字节。这里的加1相当于加1行。因此,数组名a实质上为一行指针常量。a 和a0、a1、a2都是数组名,它们代表是都是一个地址常量,都不允许被重新赋值。它们的区别是二维数组名a的基类型为具有四个整型元素的数组类型,而一维数组的数组名a0、a1、a2 的基类型为整型。(3)用数组名来表示二维数组元素的地址二维数组元素的地址可以通过二维数组的数组名a,也可以通过一维数组的数组名a0、a1、a2来表示。其中0i3、0j4。& aij /*直接利用求地址运算求aij的地址*/ai+j /* ai是第i行的地址,加上j就是aij的地址*/*(a+i)+ja0+4*i+j注意:大家在利用数组名来表示地址时,一定要分清基类型,因为不同的基类型加1是不一样的。在二维数组中,二维数组名a的基类型是行指针,加1相当于加1行(加一个一维数组);其它的,比如:a0、ai、&a00等,基类型均为普通变量,加1相当于加1个存储单元(整型)。在上面的表示中,a 、a0 、&a00虽然都是整个二维数组的首地址,但

温馨提示

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

评论

0/150

提交评论