程序设计基础ch5课件.ppt

上传人(卖家):晟晟文业 文档编号:4603619 上传时间:2022-12-24 格式:PPT 页数:24 大小:106.50KB
下载 相关 举报
程序设计基础ch5课件.ppt_第1页
第1页 / 共24页
程序设计基础ch5课件.ppt_第2页
第2页 / 共24页
程序设计基础ch5课件.ppt_第3页
第3页 / 共24页
程序设计基础ch5课件.ppt_第4页
第4页 / 共24页
程序设计基础ch5课件.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、2022-12-24程序设计基础 张杰敏1第5章 指针与数组n学习目标u理解指针、地址和数组的概念u学会使用数组和字符数组u学会指针运算的方法和技巧u学会指针作为函数参数的用法u理解函数的指针和返回指针值的函数u了解指针与二维数组配合的编程方法u了解“指针的指针”的定义n指针是一种用于存放另一个变量的地址的变量 n优点是:可以生成更高效、更紧凑的代码;有效地表示复杂的数据结构;动态分配内存;得到多于一个的函数返回值 2022-12-24程序设计基础 张杰敏25.1 指针与地址(1)n内存单元的编号也叫做地址 n通常也把存放地址的变量称为指针或指针变量n对于一个内存单元来说,单元的地址(编号)即

2、为指针变量的值,单元的内容是其中存放的数据 2022-12-24程序设计基础 张杰敏35.1 指针与地址()n指针变量的说明包括类型说明、指针变量名和指针所指向的变量的数据类型三个内容,其一般语法形式为:类型说明符*变量名 其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型 n例如:int*p1;表示p1是一个指针变量,它的值是某个整型变量的地址 nC语言中提供了地址运算符&来表示变量的地址。其一般语法形式为:&变量名如&a变示变量a的地址,&b表示变量b的地址。变量本身必须预先说明 n取内容运算的一般语法形式是:*地址这里“地址”可以是指

3、针变量名、数组名或表示地址的整型表达式 2022-12-24程序设计基础 张杰敏45.1 指针与地址()n两个指针在一定条件下可以进行比较。如果两个指针p和q指向同一数组,则它们可以进行,、和!等比较运算。例如:npq若指针p指向的位置位于指针q指向的位置之前,则其值为真;反之则为假np=q若指针p和q都指向同一个变量,则其值为真;否则为假np=0若指针p为一个空指针,则其值为真;反之为假np!=0若指针p不是空指针,则其值为真,反之为假 2022-12-24程序设计基础 张杰敏55.2 指针算术运算n对指针来说,有加,减两种算术运算,可用的算术运算符有:+,-,+,-,+=和-=n运算规则如

4、下:指针的算术运算是根据其类型的长度确定增减量来进行。由于地址计算与其相应数据类型占字节数有关,故指针的增减量,根据其类型的长度确定。+(-):指针增运算,即指针向前移动一个数据的位置,指向的新地址为 原地址+(-)sizeof(类型说明符).如设:int*p=&k;则若k的地址为2000,p+以后P的值变为2002,而非2001。p每增一次,就将指针指向后一个整数(两个字节),P-后为1998而非1999.+(-):指针变量加(减)正整数n,即表示指针向后(前)移动n个数据,使该指针所指向的地址为原地址+(-)sizcof(类型说明符)*n。如:p=p+5;之后p值为 2000+5*2=20

5、10。.说明:指针仅能做以上几种算术运算,除此之外的运算即是非法的 2022-12-24程序设计基础 张杰敏65.3 指针与函数参数n函数调用过程中有传值和传址两种参数传递方法 n指针作为函数参数,使得函数的调用灵活、高效 n指针与函数参数的配合使用,常见有三种:函数的参数为指针型、函数的返回值为指针型函数指针(指针的基本类型为函数)举例说明2022-12-24程序设计基础 张杰敏75.4 数 组()n在计算机高级语言中,把具有同一名字,互相有联系且按一定顺序排列的变量称为数组n数组中的每一变量都用不同的下标来区别,称为数组元素,0作为第一个元素的下标 n需要使用数组时,先要进行定义,然后才能

6、使用 2022-12-24程序设计基础 张杰敏85.4 数 组()n一维数组的说明格式。一般语法形式为:类型 变量名长度类型是指数据类型,即每一个数组元素的数据类型,包括整数型、浮点型、字符型、指针型以及后面要讲述的结构和联合 n一维数组的初始化赋值的一般语法形式为:类型说明符 数组名常量表达式=值,值值语言规定定义数组的同时可作初始化赋值。在 中的各数据值即为各元素的初值,各值之间用逗号间隔 n一维数组的引用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的表示形式为数组名下标2022-12-24程序设计基础 张杰敏95.4 数 组()n用来存放字符数据的数组是字符数组。字符

7、数组中的一个元素存放一个字符。几点需要说明:要区别“字符”和“字符串”,字符变量或字符数组的一个元素只能存放一个字符,用单引号引起来 C语言规定了一个“字符串结束标志”,以字符0代表 字符数组的输入/输出方式除了逐个元素(字符)输入输出外,还可以用”%s”格式符整体输入/输出 输出字符不包括结束符0 2022-12-24程序设计基础 张杰敏105.4 数 组()n二维数组的定义。一般语法形式为:类型说明符 数组名常量表达式常量表达式n二维数组的理解:可以把二维数组看成是一个一维数组,这个一维数组的每个元素又是一维数组n二维数组的元素在内存中的存放循序。按行存放 n二维数组中元素的引用。用数组名

8、和下标引用元素 n二维数组的初始化 n多维数组的一般语法形式为:类型 数组名第n维长度第n-1维长度.第1维长度2022-12-24程序设计基础 张杰敏115.5 数组的指针n指向一个数组的指针称为数组指针,可把数组名或第一个元素的地址赋予它 n一个指针变量既可以指向一个数组,也可以指向一个数组元素,如果指针指向了数组,也就是指向了数组的第一个元素(首地址)n当使指针p指向数组a后,可以用指针p访问数组的各个元素 n指针和数组在访问内存地址中的数据时,其表达形式具有相同意义。但指针与数组名具有本质上的不同,数组名是地址,也可理解为指针常量,而指针是地址变量。指针在使用前必须先赋予一定的地址值

9、指针用指针取值元素p *(p+0)a0p+1*(p+1)a1p+2*(p+2)a2p+i*(p+i)aip+9*(p+9)a9指针引用数组元素2022-12-24程序设计基础 张杰敏125.6 字符串的指针n字符串的指针,又称字符指针,本身是一个变量,用于存放字符串的首地址n字符串本身是存放在以该首地址为首的一块连续的内存空间中并以0作为串的结束 n字符串虽然是字符数组,但是字符数组和字符指针的概念不同,用字符串指针方式与字符数组方式使用字符串时是有区别的,两者的意义如图 n初始化赋值 字符串指针方式:char *ps;ps=Student personnel file;对数组方式:char

10、st=Student personnel file;2022-12-24程序设计基础 张杰敏135.7 指针数组(1)n指针数组是一个数组,该数组中的每一个元素是指针变量。其一般语法形式为:类型标识符*数组名数组元素个数例如:int*p4;定义了一个指针数组,数组名p,有4个元素,每一个元素是指向整型变量的指针 int(*p)4;/*指向数组的指针*/这句定义一个指针变量,它指向有4个元素的一维数组 2022-12-24程序设计基础 张杰敏145.7 指针数组(2)n指针数组主要用于处理多个字符串。字符串本身是一维数组,多个字符串可以用二维数组来处理,但会浪费许多内存。用指针数组处理多个字符串

11、,不会浪费内存。n如要将7个国名并按字母顺序排列后输出,一种方法是采用普通的排序方法,逐个比较之后交换字符串的位置。交换字符串的物理位置是通过字符串复制函数完成的。反复的交换将使程序执行的速度很慢,同时由于各字符串(国名)的长度不同,又增加了存储管理的负担。另一种较好的方法是使用指针数组,排序前后指针的指向情况见图。把所有的字符串存放在一个数组中,把这些字符数组的首地址放在一个指针数组中,当需要交换两个字符串时,只须交换指针数组相应两元素的内容(地址)即可,而不必交换字符串本身。下图为排序前后示意图:2022-12-24程序设计基础 张杰敏155.8*指针的指针n指向指针的指针变量说明的一般语

12、法形式为:类型说明符*指针变量名;n例如:右图首先定义说明了指针数组ps并作了初始化赋值。又说明了pps是一个指向指针的指针变量。在5次循环中,pps 分别取得了ps0,ps1,ps2,ps3,ps4的地址值(如图5-10所示)。再通过这些地址即可找到该字符串 2022-12-24程序设计基础 张杰敏165.9 指针与多维数组(1)n简单指针变量引用多维数组的元素n一般地,若需访问二维数组anm(n行m列)的某个元素aij,计算该元素的相对位置公式为:i*m+j(i,j=0,1,2,.)相当于把二维数组转化为一维数组来使用 如:int a3,4=1,3,5,7,9,11,13,15,17,19

13、,21,23;int a12=1,3,5,7,9,11,13,15,17,19,21,23;引用时使用a13和a7都是指第8号元素,这里即152022-12-24程序设计基础 张杰敏175.9 指针与多维数组(2)n通过指针数组引用多维数组元素n对于二维数组可以为其中每个一维数组(每行),设一个指针。也可设一个指针数组,这个指针数组的每一个指针指向二维数组中的每个一维数组n如:int a34=1,3,5,7,9,11,13,15,17,19,21,23;int*pa3=a0,a1,a2;/*将3行的首地址赋给指针数组*/这时的pa2+1就指向a21,即整型数19 2022-12-24程序设计基

14、础 张杰敏185.9 指针与多维数组(3)n通过二维数组的数组名表达式引用多维数组的元素n二维数组的数组名代表该数组的首地址,相当于一个指针常量 n二维数组中各一维数组名也是一个指针常量,代表一维数组的首地址。若a的首地址为2000,则右图可以清楚底说明数组名作为指针常量的引用情况 n已知某元素的指针后,可以用*运算符访问该元素。只需在*()内写入含数组名的地址表达式,就可以引用数组元素 a0+1a0+2a0+3a0+1a0+2a0+32022-12-24程序设计基础 张杰敏195.9 指针与多维数组(4)n使用指向二维数组的指针变量n二维数组指针变量说明的一般语法形式为:类型说明符 (*指针

15、变量名)长度n其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数 n设p为指向二维数组的指针变量,把二维数组a34分解为一维数组a0,a1,a2之后,可定义为:int(*p)4;它表示p是一个指针变量,它指向二维数组a 或指向第一个一维数组a0,其值等于a,a0,或&a00等。而p+i则指向一维数组ai。从前面的分析可得出*(p+i)+j是二维数组i行j 列的元素的地址,而*(*(p+i)+j)则是i行j列元素的值 2022-12-24程序设计基础 张杰敏205.10 指针与函数(1)n函数的参

16、数为指针 n用指针作函数参数,其作用是将一个变量的地址送到被调用函数之中,由此,被调用函数可以操作外部变量或主调出函数定义的变量单元 n举例说明2022-12-24程序设计基础 张杰敏215.10 指针与函数(2)n函数的返回值为指针 n在C语言中允许一个函数的返回值是一个指针(即地址)。函数的返回值为指针型时,该函数常被称为指针型函数。定义指针型函数的一般语法形式为:存储类型 数据类型*函数名(形参表)/*函数体*/其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。存储类型是指该函数本身的存储特性,一般分为缺省存储类型和static型。数据类型说明符表示了返回的指针值所指

17、向的数据类型 n举例说明2022-12-24程序设计基础 张杰敏225.10 指针与函数(3)n指向函数的指针 n在C语言中规定,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为函数指针变量或函数(型)指针。n函数指针定义和说明的一般语法形式;存储类型 数据类型(*函数指针名)();其中,存储类型是指函数指针本身的存储特性,而数据类型是指针所指向的函数的数据类型n函数指针主要用于在函数间传递函数 2022-12-24程序设计基础 张杰敏235.11 编程指导n常使用符号常量是一个好习惯 n一种常用的重要风格是对程序进行结构化,用一个函数来完成一个基本任务,这种作法是结构化编程的核心 n指针变量前面字母一般为p或ptr,这样可以清楚地标示这些变量是指针 n对频繁访问的函数中的动态数组,可以声明为static。这样不会在每次调用函数时都初始化数组,而每次退出时也不会破坏数组2022-12-24程序设计基础 张杰敏24本章小结

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

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


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

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


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