全国计算机等级考试2C课程第9讲 指针

上传人:油条 文档编号:26839510 上传时间:2018-01-02 格式:PPT 页数:56 大小:541KB
返回 下载 相关 举报
全国计算机等级考试2C课程第9讲 指针_第1页
第1页 / 共56页
全国计算机等级考试2C课程第9讲 指针_第2页
第2页 / 共56页
全国计算机等级考试2C课程第9讲 指针_第3页
第3页 / 共56页
全国计算机等级考试2C课程第9讲 指针_第4页
第4页 / 共56页
全国计算机等级考试2C课程第9讲 指针_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《全国计算机等级考试2C课程第9讲 指针》由会员分享,可在线阅读,更多相关《全国计算机等级考试2C课程第9讲 指针(56页珍藏版)》请在金锄头文库上搜索。

1、全国计算机等级考试 2C课程,第九讲 指针,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,2,变量与地址的概念,内存区的每一个字节都有一个编号,这就是“地址” 。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配一个相应大小的存储单元。我们可以使用变量名来存取这个存储单元的值,这种访问存储单元的方式称为“直接访问”方式。,例如: int i=10,j; printf(%d,i); scanf(%d,例中i和j都是变量名,利用它们访问相应存储单元里所存储的数据的方式称为“直接访问”。,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,3,变量与地址的概念,编译程序:

2、int i; 编译程序: float k;,内存中每个字节都有一个编号地址,2000,2005,计算机的内存,0000,2003,i,k,变量,其实就是对程序中数据存储空间的抽象,2001,2002,2004,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,4,指针与指针变量的概念,指针:就是一个变量的地址指针变量:就是专门用来存放变量地址的变量,这里的2000就是变量的地址,也叫指针,这里的10是变量i的内容,这里的2000就是指针变量i_pointer的内容,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,5,指针变量的定义,定义指针变量的一般形式: 存储类型 数据类型 *指针名说

3、明存储类型是可选的,指定指针变量的存储类型,默认为auto。在定义指针变量时必须指定数据类型。这里的*仅仅用来表示定义的变量系指针变量,而不是*运算符。指针名必须是合法的标识符。,例: int *p1,*p2; float *q ; static char *name;,注意:1、int *p1,*p2;与int *p1,p2的不同;2、指针变量名是p1,p2 ,不是*p1,*p2,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,6,&和*运算符&和*都是单目运算符优先级: 2 级结合性:自右向左&的作用是取变量的地址;*的作用是取指针所指向的变量的值,取地址运算符& 与指针运算符*,说明

4、:i_pointer:指针变量,它的值必须是一个地址值 *i_pointer:表达式,代表指针变量所指向的变量的值 &i_pointer:表达式,代表指针变量占用的存储单元的首地址,例: #include main() int i=100,*i_pointer; i_pointer = ,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,7,指针运算符&与*,思考下面问题: 如果已经执行了p=语句,(*p)+和*p+的区别是什么? (*p)+相当于a+,即将指针变量p所指示的变量的值加1。而*p+等价于*(p+),这时先将p的值加1,p不再指向a了,而是指向a所占用存储区域的后续位置,再取其

5、内存值。,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,8,小练习:,1、有以下程序#include #define N 8void fun(int *x,int i)*x=*(x+i);main()int aN=1,2,3,4,5,6,7,8,i;fun(a,2);for(i=0;ip2; 表示p1处于高地址位置p1p2; 表示p1处于低地址位置,指针变量还可以与0比较。,例如:p=0; 表示p是空指针p!=0; 表示p不是空指针,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,14,指向数组元素的指针,一个数组元素按数组类型不同占用若干连续的内存单元。数组元素的地址也就是它所占用

6、的这若干内存单元的首地址(如右图中p所指)。数组名是一个地址常量,也就是这块连续内存单元的首地址。定义一个指向数组元素的指针变量的方法,与以前介绍的指针变量相同。例如:,int array10;int *p;p = ,例程中,p=,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,15,指向数组元素的指针,设有C语句:int a10,*p; p=a; 则引用数组元素的方法可以多达4种,地址的表示,引用数组元素的方法,ai pi *(p+i) *(a+i),2018/1/2,作者:张旭仟 版权所有 欢迎盗版,16,指向数组元素的指针,综上所述,引用数组元素的方法可以归纳为两种:下标法。即用ai

7、或pi形式访问数组元素。在前面介绍数组时都是采用这种方法。指针法。即采用*(a+i)或*(p+i)形式,是用间接访问的方法来访问数组元素,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,17,小练习:,2、设有定义double a10,*s=a;,以下能够代表数组元素a3的是 (2010年3月)A)(*s)3B)*(s+3)C)*s3D)*s+3,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,18,二维数组及其元素的地址,二维数组的组成二维数组可以看做是“数组的数组”,即二维数组的每个元素,都是一个一维数组。例如:int a34=0,1,2,3,4,5,6,7,8,9,10,11 ;

8、我们可以把数组a看成是有三个元素组成的一维数组,它们分别是a0、a1、a2以上二维数组元素的组成关系如下图所示:,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,19,二维数组及其元素的地址,二维数组的地址二维数组名也是一个地址。如上例中a是数组的首地址。同时也是其第一个元素a0的(首)地址。注意:对二维数组名做“移动指针”运算,如:a+1,运算的结果,指针指向a1,而不是a0 1,就是说,指针移动的单位是“行”,而不是“列”。请看下图:,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,20,二维数组及其元素的地址,二维数组元素的地址取二维数组元素的地址的一般方法是:&数组名行标列标如

9、表达式&aij,代表数组a第i行第j列元素的地址若从一维数组的角度分析, aij的地址,可以用ai+j来表示。其中ai是行名, 若有指针运算ai +1,则指针向后移动一个数组元素。综上所述,可以用两种方法表示一个二维数组的元素:&aijai+j,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,21,二维数组及其元素的地址,二维数组元素的地址ai 与*(a+i)是等价的。其中ai是二维数组a第i行的行名,代表第i行的首地址在*(a+i)中,a是二维数组名,代表二维数组的首地址,同时也是数组第一行a0的首地址。 运算a+i,指针被移动到第i行的首部,代表第i行,即ai的首地址。那么,根据指针运

10、算符的定义,表达式*(a+i)即可代表ai 。由于aij和a00之间相差4*i+j个元素(每行4个元素),而a00的地址可以表示为&a00或a0,因此aij的地址又可表示为:&a00+4*i+j 或 a0+4*i+j,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,22,二维数组及其元素的地址,利用二维数组元素的地址引用二维数组元素的值通过指针运算符“*”,可以使用5中方法来引用数组元素aij的值:*(&aij)*(ai+j)*(*(a+i)+j)*(&a00+4*i+j)*(a0+4*i+j),2018/1/2,作者:张旭仟 版权所有 欢迎盗版,23,二维数组及其元素的地址,设有如下整型

11、二维数组的首地址为2000 int a34=0,1,2,3,4,5,6,7,8,9,10,11,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,24,指向多维数组的指针变量数组指针,数组指针就是指向数组的指针,其指向的数据类型是数组。数组指针变量说明的一般形式为:类型说明符 (*指针变量名)长度其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。应注意,“(*指针变量名)”两边的括号不可少,如缺少括号则表示是指针数组(本讲后面介绍),意义就完全不同了。,2018/1/2,作者:张旭仟 版权所

12、有 欢迎盗版,25,指向多维数组的指针变量数组指针,由二维数组的性质知,我们可把二维数组a34看作三个一维数组:a0、a1、a2 。如有如下语句:int (*p)4;其中p是一个指针变量,它可以指向每行包含4个元素的整型二维数组。若有p=a;,则p的值等于a、a0 或&a00。而p+i则指向一维数组ai。从前面的分析可知:*(p+i)+j 是二维数组i行j 列的元素的地址;而 *(*(p+i)+j) 则表示i行j列元素的值,即aij 。对于aij,也可以直接用pij来表示。,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,26,小练习:,3、若有定义int (*pt)3;,则下列说法正确的是(2010年3月)A)定义了基类型为int的三个指针变量B)定义了基类型为int的具有三个元素的指针数组ptC)定义了一个名为*pt、具有三个元素的整型数组D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组,2018/1/2,作者:张旭仟 版权所有 欢迎盗版,27,小练习:,4、函数fun的功能是:找出NN矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。请填空 使程序得出正确的结果。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号