C语言程序设计课件:第5章 指针2.ppt

上传人(卖家):罗嗣辉 文档编号:2045942 上传时间:2022-01-21 格式:PPT 页数:36 大小:1.67MB
下载 相关 举报
C语言程序设计课件:第5章 指针2.ppt_第1页
第1页 / 共36页
C语言程序设计课件:第5章 指针2.ppt_第2页
第2页 / 共36页
C语言程序设计课件:第5章 指针2.ppt_第3页
第3页 / 共36页
C语言程序设计课件:第5章 指针2.ppt_第4页
第4页 / 共36页
C语言程序设计课件:第5章 指针2.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、5.2 指针与数组的关系指针与数组的关系在在C C语言中,指针与数组有着十分密切的关系。语言中,指针与数组有着十分密切的关系。访问数组元素有两种方法:即访问数组元素有两种方法:即下标法下标法和和指针法指针法。 指向数组的指针指向数组的指针指向数组的指向数组的起始地址起始地址,指向数指向数组元素的指针组元素的指针是数组是数组元素的地址元素的地址。60006001600260036004600560066007a0a1a2a3aa+1a+260006001600260036004600560066007a0a1a2a3app+p+ 数组元素表示方法数组元素表示方法a0a1a2a3a9.aa+9a+

2、1a+2地址地址元素元素下标法下标法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址地址元素元素指针法指针法*p*(p+1)*(p+2)*(p+9)ai *(a+i)ai pi *(p+i) *(a+i)*a*(a+1)*(a+2)*(a+9)p0p1p2p9.12341. p+1与与p+的异同:的异同:p+1与与p+都指向当前指针所指单元的下一个元素都指向当前指针所指单元的下一个元素p+1并不改变当前指针的指向,即并不改变当前指针的指向,即p的值并未改变,的值并未改变, 而而p+相当于相当于p=p+1,即使指针即使指针p向下移动一个元素向下移动一个元素位置位置2. 在对指针进行

3、加、减运算中,数字在对指针进行加、减运算中,数字1 1不再代表十进不再代表十进制中的整数制中的整数1 1,即,即 p+1p+1p +1*sizeof(基类型)基类型)pp+12的高位字节的高位字节2的低位字节的低位字节2的高位字节的高位字节2的低位字节的低位字节10001002100410061008a0a1a2a3a4pshort a5= 2,4, 23,6,78 ;short *p;p=a;若是若是 :p+1若是若是 :p基类型是基类型是 short , p+1相相当于加上当于加上2个字节个字节例例 int a =1,2,3,4,5,6,7,8,9,10, *p=a, i; 数组元素数组元

4、素地址的正确表示:地址的正确表示:(A)&(a+1) (B)a+ (C)&p (D)&pi数组名是数组名是地址常量地址常量p+,p- ( )a+,a- ( )a+1, *(a+2) ( )不能对表达式不能对表达式求地址求地址求的是指针求的是指针p的地址的地址#include main() int i,*p,a7; p=a; for(i=0;i7;i+) scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%dt,*p);例例 注意指针的当前值注意指针的当前值p=a;pp5876273 0 1 2 3 4 5 6apppppp指针变量可以指到指针变

5、量可以指到数组后数组后的内存单元的内存单元 am-10 am-11 am-1n-1 a00 a01 . a0n-1 a10 a11 . a1n-1 .amn= am-1n-1 . am-11 am-10 . a1n-1 . a11 a10 a0n-1 . a01 a00a0a1am-1a00a01a02a10a11a12a0+1a0+2&a11a1+1&a12&a01&a02 a00 a0a01a02a10 a1 a11a12 a a1+2 a23;a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;a 代表代表二二维数组的首地址,维数组的首地

6、址,第第0 0行行的地址的地址a + i 代表代表第第i i行行的地址的地址a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;*(a + i) 即即 ai 代表代表第第i行行的地址的地址*(a+i) + j 即即 ai + j代表代表第第i行行的地址的地址&aij &a12a1+2a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;&a12a1+2( *(a+i) + j ) 即即 aij 代表代表第第i行第行第j列列的的*(a + i) 即即 ai 代表代表第第i行行的地址的地址,*(a+i

7、) + j 即即 ai + j代表代表第第i行行的地址的地址&aij short a34=1,2,3,4,5,6,7,8,9,10,11,12; int *p = &a00;a1a0a21234567891011 12行地址行地址a+2a+1a第第i行的地址为:行的地址为:a+i、*(a+i) 、ai、&ai 或或&ai0任一元素任一元素aij的地址为:的地址为:&aij、ai+j 、 *(a+i)+j 或或 p+i*4+j元素元素aij也可表示为:也可表示为: aij 、 *(ai+j) 、 *(*(a+i)+j) 或或*(p+i*4+j)*(a+i)a+iai&ai当一个指针变量所指向的元

8、素为数组时,这种类型当一个指针变量所指向的元素为数组时,这种类型的指针称为的指针称为指向数组的指针指向数组的指针,其定义格式为:,其定义格式为: (* )数组的大小数组的大小; 如:如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; int (* p)4; (* p)指明指明p是一个指针变量,再与是一个指针变量,再与4结合,表示该结合,表示该指针变量指向一个有四个元素的一维数组。指针变量指向一个有四个元素的一维数组。p= &a0; p=a0;p指向的行的元素可以表示为指向的行的元素可以表示为(*p)0, (*p)3p= a,二维数组二维数组a中任一元素可表示为中任一元

9、素可表示为pij( )( )不能少不能少int (*p)4与与int *p4不同不同p的值是一维数组的的值是一维数组的首地址,首地址,p p是是行指针行指针int a34;a00a01a10a11a20a21a02a03a12a13a22a23aa+1a+2pp+1p+2p0+1或 *p+1p1+2或 *(p+1)+2*(*p+1)或 (*p)1 *(*(p+1)+2)一维数组指针变量维数和一维数组指针变量维数和二维数组二维数组列数列数必须相同必须相同第第i 行、第行、第j 列元素列元素aij 的表示方法的表示方法是:是:*(*(p+i)+j)(*p)0(*p)1(*p)2(*p)3P#inc

10、lude main() int a34=1,3,5,7,9,11,13,15,17,19,21,23; int i, j, (*p)4; for(p=a, i=0;i3;i+,p+) for(j=0;j4;j+) printf(%4d ,*(*p+j); printf(n); 例例 一维数组指针变量举例:一维数组指针变量举例: 输出二维数组每行每列元素的值输出二维数组每行每列元素的值int a34;a00a01a10a11a20a21a02a03a12a13a22a23ppp p0j p1j p2j运行结果:1 3 5 7 9 11 13 15 17 19 21 23 5.3 指针数组指针数组

11、指针数组中每个元素都是一个指针,且这指针数组中每个元素都是一个指针,且这些指针指向相同数据类型的变量些指针指向相同数据类型的变量定义格式:定义格式: 类型说明符类型说明符 *数组名数组名常量常量N 如如 : char *p5;如果一个数组中的每个元素都是同类型的指针,则该数组称如果一个数组中的每个元素都是同类型的指针,则该数组称为指针数组。格式如下:为指针数组。格式如下: * ; 如如: int *p14; float *p216; 对指针数组初始化时其每个元素的值都为地址。对指针数组初始化时其每个元素的值都为地址。当定义了一个指针变量时,如:当定义了一个指针变量时,如: char c, *p

12、=&c; 系统会为指针变量系统会为指针变量p分配内存单元。我们可以定义分配内存单元。我们可以定义另一个指针,使得该指针指向另一个指针,使得该指针指向p的内存单元,如:的内存单元,如: char *pp=&p; pp称为指向指针称为指向指针p的指针,又称为二级指针。的指针,又称为二级指针。 定义二级指针的一般格式为:定义二级指针的一般格式为: *; pppcp2p1i# include void main(void)int i=10;int *p1,*p2;p1=&i;p2=&p1;printf(i= %d %d %d n, i, *p1, *p2);printf(p1= %x %x %x n,

13、 &i, p1, *p2);printf(p2= %x %x n, &p1, p2);系统找到一块未占用的内存,将其标记为已占系统找到一块未占用的内存,将其标记为已占用,然后把地址返回,并标记此程序占用此块用,然后把地址返回,并标记此程序占用此块内存,其它程序不能再用它内存,其它程序不能再用它向系统申请大小为向系统申请大小为的内存块的内存块把首地址返回把首地址返回如果申请不成功,返回如果申请不成功,返回int *pp = (int *) malloc(n * sizeof (int);if (p = NULL) printf(No enough memory!n); exit(0); 释放由释

14、放由malloc()申请的内存块申请的内存块p是指向此块内存的指针是指向此块内存的指针free时系统标记此块内存为未占用,可被重新分配时系统标记此块内存为未占用,可被重新分配int *pp = (int *) malloc(n * sizeof (int);for (i=0;in;i+)pi = i;free(p);确保指针使用前是非空指针确保指针使用前是非空指针释放向系统申请的存储空间释放向系统申请的存储空间int *pp = (int *) malloc(n * sizeof (int);for (i=0;in;i+)pi = i;free(p);定义定义含义int i;int *p;int aN;int *pN;int (*p)N;int f();int *p();int (*p)();int *p;定义整型变量定义整型变量ip为指向整型数据的指针变量为指向整型数据的指针变量定义含定义含N个元素的整型数组个元素的整型数组aN个指向整型数据的指针变量组成的个指向整型数据的指针变量组成的指针数组指针数组pp为指向含为指向含N个元素的个元素的一维整型数组的指针一维整型数组的指针变量变量f为返回整型数的函数p为返回指针的函数,该指针指向一个整型数据p为指向函数的指针变量,该函数返回整型数p为指针变量,它指向一个指向整型数据的指针变量

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(C语言程序设计课件:第5章 指针2.ppt)为本站会员(罗嗣辉)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|