C++程序设计 教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计

上传人:E**** 文档编号:89381710 上传时间:2019-05-24 格式:PPT 页数:75 大小:912.50KB
返回 下载 相关 举报
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计_第1页
第1页 / 共75页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计_第2页
第2页 / 共75页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计_第3页
第3页 / 共75页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计_第4页
第4页 / 共75页
C++程序设计  教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《C++程序设计 教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计》由会员分享,可在线阅读,更多相关《C++程序设计 教学课件 ppt 作者 连卫民 何樱 韩彦锋 等 第7章 指针与引用的程序设计(75页珍藏版)》请在金锄头文库上搜索。

1、C+程序设计,连卫民 主编,中国铁道出版社 2008.9,第7章 指针与引用的程序设计,本章主要内容: 7.1 指针的基本概念(重点) 7.2 数组和指针(重点) 7.3 函数和指针(重点) 7.4 引用(重点) 7.5 动态存储管理 7.6 上机实训 本章教学目标: 了解函数与指针的关系、如何合理使用动态内存空间 熟悉指针和引用的基本概念、指针和引用作函数参数、动态申请和释放内存的方法 掌握各种类型指针的定义及使用、指针函数的定义与使用、利用指针处理数组和函数的方法、引用的定义与使用,7.1 指针的基本概念,在运行时,程序中定义的变量、使用的数据,包括程序代码本身,都要在内存中占有一块存储区

2、域。 7.1.1 引入指针的目的 1. 地址的概念 计算机的内存以字节为基本存储单元顺序组织而成。计算机在使用内存时,总是从0开始为所有存储单元依次编号,这个编号就是地址。 在程序中,总是以变量形式使用内存数据,不需要也没必要关心这个数据的实际存储位置。实际上,在程序编译成可执行文件后,这些变量名已经不存在,替代变量名的就是这些变量的内存地址。,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.1 引入指针的目的(续) 2. 用地址处理数据的优势 在用C+进行程序设计时,一般不关心具体的地址值,但却经常使用地址来操作数据。因为使用地址有时比直接使用变量更有效率。 比如,如果需要对多

3、个字符串进行排序处理,采用交换字符串内容的方法显然是不可取的,因为不同的字符串的长度一般不一样,这时,就可以使用代表字符串的地址来代替字符串实现排序,不但解决了问题,而且提高了速度。 3. 指针的概念 地址就是指针。变量的指针就是指变量的内存地址。保存指针值的变量称为指针变量。这个指针指向的位置处存放的数据,就叫指针指向的数据。如果一个指针不指向任何数据,它被称为空指针,用符号NULL表示。 指针也有类型之分。指针的类型就是它所指向的数据的类型。,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.2 指针的定义 1. 指针的定义和初始化 指针的定义,就是指指针变量的定义。后面提到的

4、指针,一般指指针变量或常量。在不引起混淆的情况下,后面不再区分指针和指针变量。 指针的定义格式为: 类型名 *指针变量名=指针表达式; 例如: (1) int *pi; /指向整型数据的指针变量pi, 没有初值 (2) char *pc=NULL;/指向字符型的指针变量pc,初值为空 (3) int i,*p= / 指向整型数据的指针变量p,它的初值是整型变量i的地址,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.2 指针的定义(续) 2. 常值指针 有时,我们不希望改变某些指针的值。这时,可以使用const把一个指针定义为常值指针。根据const出现位置的不同。 常指针的定义

5、格式为: const 类型名 *指针变量名=指针表达式; 类型名 *const 指针变量名=指针表达式; const 类型名 * const 指针变量名=指针表达式; 例如: int i=3,j=4; / 定义两个整型变量 const int *p= / 指向常量的常指针,必须初始化,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.3 指针的运算 1. 赋值运算 任何类型的指针都可以赋予空值NULL,也可以使用同类型的指针或地址赋值。另外,任何类型的指针都可以赋给void型的指针,但反过来却不行。 例如: int i=3,*p= / 错误,第7章 指针与引用的程序设计,7.1 指

6、针的基本概念,7.1.3 指针的运算(续) 2. 取值运算 取值运算的格式为: *指针变量 其作用是取指针所指向地址处存放的值。引入指针的目的并不仅仅是处理地址,更主要的是通过指针处理数据。 例如: int i=3,*p= 输出结果为: 3,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.3 指针的运算(续) 3. 关系运算 关系运算一般用在同类型的两个或两个以上指针都指向同一个连续的数据区的情况。 (1)判断指针是否为空。空(NULL)是一个特殊值,任何类型的指针都可以和它比较。比较的目的是为了验证一个指针变量是否为空,如果为空,这个指针是无法使用的。 (2)判断两个指针是否相

7、等。在某些场合下,如指向一个数组中的两个指针、堆栈中的栈顶和栈底指针、队列中的指针等可进行指针是否相等的比较。不同类型之间的指针进行比较一般没有意义。在使用这种形式的判断时,除了保证这些指针所指向的数据类型一样外,更要注意这些数据的存储位置必须是连续存储,顺序相关。否则比较就失去了意义。,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.3 指针的运算(续) 4. 算术运算 (1)两个同类型指针相减,运算格式为: 指针变量1-指针变量2 该运算的结果是一个整数,表示两个指针间可容纳的相应类型数据的个数,或者是元素个数。它要求两个指针的类型相同,适合处理数组。 (2)指针加减一个整数

8、,运算格式为: 指针变量+n 或 指针变量-n n为整数,该运算结果为指针变量值后的第n个数据的地址。 这种运算适用于利用指针处理数组元素。,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.3 指针的运算(续) 4. 算术运算(续) (3)指针自增或自减,对于一个指针变量p,有下面四种格式: p+; p-; +p; -p; 该运算的结果为指针变量获得所指向数据的前一个或后一个同类数据的地址。这种运算要改变指针变量的值,也就是移动了指针。 这种运算往往用于处理数组。,第7章 指针与引用的程序设计,7.1 指针的基本概念,7.1.3 指针的运算(续) 5. 指针的强制转换 在C+中,

9、任何两个类型的指针都可以进行强制类型转换。转换的格式为: (类型名*) 指针表达式; 例如: short int num2=1,2,*q= 这段代码的输出结果是131073。,第7章 指针与引用的程序设计,例7.1利用指针实现:输入两个整数a和b,按由大到小顺序输出a和b。,#include void main() int a,b,t,*p1,*p2; coutab; p1=/通过指针输出 ,程序运行结果为: Input a,b = 3 4 a=4,b=3 a=4,b=3,第7章 指针与引用的程序设计,7.2 数组和指针,7.2.1 数组指针 1. 指向一维数组的指针 在C+中,数组名是一块连

10、续存储区的标记,代表着这个数组的起始地址。而且数组名是指针常量,是指向数组的指针常量,也简称为数组指针。定义格式是: 指针类型名 *指针名; 例如: int a10, *p=a; 指针p是一个指向一维数组a的指针,使用p可访问数组a中的所有元素,如图7-3所示。 在访问一维数组时,我们可以通过下列方式访问数组元素或地址: (1)访问数组中的第i个元素:ai; *(a+i); *(p+i) ; pi; (2)访问数组中的第i个元素的地址:,第7章 指针与引用的程序设计,例7.2 分别使用数组的下标方式、指针方式和指向数组的指针方式输出一个数组的全部元素。,#include #include vo

11、id main() int num10=1,2,3,4,5,6,7,8,9,10,*p=num; int i; for(i=0;i10;i+) coutsetw(4)numi; / 以下标方式输出 coutendl; for(i=0;i10;i+) coutsetw(4)*(num+i); / 以指针方式输出 coutendl; for(i=0;i10;i+) coutsetw(4)*(p+i); / 以指向数组的指针方式输出 coutendl; for(i=0;i10;i+) coutsetw(4)pi; / 以指向数组的指针的下标方式输出 coutendl; for(i=0;i10;i+)

12、 coutsetw(4)*p+; / 以变化的指针方式输出 coutendl; ,第7章 指针与引用的程序设计,7.2 数组和指针,7.2.1 数组指针(续) 2. 指向二维数组的指针 定义格式: 指针类型名 (*指针名)列数; 例如: int a34, (*p)4=a; 与一维数组和指向一维数据的指针类似,指针p和a也几乎等价,它们都是指向二维数组的指针,或者说是指向由4个整数元素(对于本例来说)组成的一维数组的指针。区别仅在于p是变量,而a是常量。二维数组a可以看成是由a0、a1、a2三个一维数组组成的一维数组,a是a0、a1、a2这个一维数组的数组名。p=a相当于p指向这个一维数组的首地

13、址,如图7-4所示。,第7章 指针与引用的程序设计,例7.3 分别使用二维数组的下标方式、指针方式等多种形式输出一个二维数组的全部元素。,若有如下定义: int a34,*p; p= p+相当于p指向a01。即把二维数组按存储顺序当成一维数组来处理,如图7-5 所示。,#include #include void main() int num34=1,2,3,4,5,6,7,8,9,10,11,12; int *p=,第7章 指针与引用的程序设计,例7.3 (续一),for(i=0;i3;i+) / 以下标方式输出 for (j=0;j4;j+) coutsetw(4)numij; coute

14、ndl; coutendl; for(i=0;i3;i+) / 以指针方式输出 for(j=0;j4;j+) coutsetw(4)*(*(num+i)+j); coutendl; coutendl; for(i=0;i3;i+) / 以指向数组的指针方式输出 for(j=0;j4;j+) coutsetw(4)*(qi+j); coutendl; coutendl;,第7章 指针与引用的程序设计,例7.3 (续二),for(i=0;i3;i+) / 以指向数组的指针的下标方式输出 for(j=0;j4;j+) coutsetw(4)qij; coutendl; coutendl; for(i

15、=0;i3;i+) / 以一维数组方式输出 for(j=0;j4;j+) coutsetw(4)*(p+i*4+j); coutendl; ,第7章 指针与引用的程序设计,例7.4 分别使用二维数组的元素地址、行地址、数组名等多种方式输出二维数组的某些地址,并进行分析和比较。,#include #include void main() int num23=1,2,3,4,5,6; int *p=,第7章 指针与引用的程序设计,例7.4 (续一),cout“n用指针输出行地址:“endl; for(i=0;i6;i+) coutsetw(12)q+; cout“n输出可能的二维数组的地址:“endl; for(i=0;i6;i+) coutsetw(12) ,程序运行结果为: 以指针方式输出全部元素: 1 2 3 4 5 6 输出全部元素的地址: 0x0012FF4C 0x0012FF50 0x0012FF54 0x0012FF58 0x0012FF5C 0x0012FF60 用数组名输出行地址: 0x0012FF4C 0x0012FF58 0x0012FF64 0x0012FF70 0x0012FF7C 0x0012FF88 用指针输出行地址: 0x0012FF4C 0x0012FF58 0x0012FF64 0x0012FF70 0x0012FF7C 0x0012

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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