C++程序设计(第3版)谭浩强 第6章_第1页
C++程序设计(第3版)谭浩强 第6章_第2页
C++程序设计(第3版)谭浩强 第6章_第3页
C++程序设计(第3版)谭浩强 第6章_第4页
C++程序设计(第3版)谭浩强 第6章_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、C+ 程序设计程序设计第2篇 基于过程的程序设计第6章 善于使用指针与引用铜陵学院 汪永生目录6.1 什么是指针6.2 变量与指针6.3 数组与指针6.4 字符串与指针6.5 函数与指针6.6 返回指针值的函数6.7 指针数组和指向指针的指针6.8 const 指针6.9 void指针类型6.10 有关指针的数据类型和指针运算的小结6.11 引用第5章 利用数组处批量数据6.1 什么是指针1. 地址 系统根据程序中定义变量的类型,给变量分配一定的长度空间。字符型占1个字节,整型数占4个字节.。内存区的每个字节都有编号,称之为地址。第5章 利用数组处批量数据6.1 什么是指针2.变量存取方式(1

2、)直接访问 按变量地址存取变量的值。cini; 实际上放到定义 i 单元的地址中。(2)间接访问 将变量的地址存放在另一个单元p中,通过 p 取出变量的地址,再针对变量操作。3.变量指针与指针变量变量指针:即一个变量的地址。指针变量:专门用来存放地址(即指针)的变量。ii2000H2000H3000Hp第5章 利用数组处批量数据6.2 变量与指针 变量的指针即变量的地址,而指针变量是用来存放变量地址的变量。 *符号表示指向,例如,i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量,如图所示:6.2.1 定义指针变量 定义指针变量的一般形式: 基类型基类型

3、 * *指针变量名指针变量名 如:int *pointer1,float *pointer2,char *pointer320003i_pointer*i_pointer2000i第5章 利用数组处批量数据6.2 变量与指针 指针变量指向另一个变量的方法: 把被指向的变量地址赋给指针变量即可。例如: pointer1 =&i; pointer2 =&j; pointer1pointer2ij注意:(1)在定义指针变量时必须指定基类型。(2)怎么表示指针类型。(3)不能用一个整数给一个指针变量赋值。(4)一个指针变量只能指向同一个类型的变量。(5)要具体说明该指针变量的类型,如:

4、a是指向整型数据的指针变量等。第5章 利用数组处批量数据6.2.2 引用指针变量 指针变量运算符:(1)&:取地址运算符(2)*:指针运算符(或称间接访问运算符) 例例6.1 通过指针变量访问整型变量。第5章 利用数组处批量数据6.2.2 引用指针变量例例6.2 输入a和b两个整数,按先大后小的顺序输出a和b(用指针变量处理)。第5章 利用数组处批量数据6.2.3 用指针作函数参数 指针类型可以作为函数的参数,作用是将一个变量的地址传送给被调用函数的形参。例6.3 输入a和b两个整数,按先大后小的顺序输出a和b(用函数处理,而且用指针类型的数据作函数参数)。错误:错误:swap(*po

5、inter_1,*pointer_2)第5章 利用数组处批量数据6.2.3 用指针作函数参数未对未对temp赋值,赋值,temp值不可预值不可预见!见!值传递值传递第5章 利用数组处批量数据6.2.3 用指针作函数参数错误:试图通过改变形参指针变量的值错误:试图通过改变形参指针变量的值而使实参指针变量的值改变!而使实参指针变量的值改变!第5章 利用数组处批量数据6.2.3 用指针作函数参数 例6.4 输入a,b,c三个整数,按由大到小顺序输出。调用函数时不会改变实参指针变量调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所的值,但可以改变实参指针变量所指向变量的值。指向变量的值。第5

6、章 利用数组处批量数据6.3 数组与指针6.3.1 指向数组元素的指针 (1)数组元素的指针就是数组元素的地址。如: int a10; int *p; p =&a10;(或p =a) (2)如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。第5章 利用数组处批量数据6.3.1 指向数组元素的指针 引用一个数组元素的方法: (1)下标法,如ai; (2)指针法,如*(a+i)或*(p+i) 例6.5 输出数组中的全部元素。 假设有一个整数数组a,有10个元素。要输出各元素的值有3种方法:(1)下标法(2)指针法 将上例程序中ai改为*(a+1)(3)用指针变量指向

7、数组元素第5章 利用数组处批量数据6.3.2 用指针变量作函数形参接收数组地址 数组名代表数组首元素的地址,用数组名作函数的参数,传递的是数组首元素的地址。 例6.6 将10个整数按由小到大的顺序排列。 要求:在例5.7程序的基础上,将形参改为指针变量。说明:说明:(1)C+编译系统将形参数组名一律作为指针变量来处理。(2)函数调用时并存在一个占有存储空间的形参数组,只有指针变量。(3)实参数组名a代表一个固定的地址,或者说是指针型常量,因此要改变a的值是不可能的。第5章 利用数组处批量数据6.4 字符串与指针 (1)用字符数组存放一个字符串 例6.7 定义一个字符数组并初始化,然后输出其中的

8、字符串。 (2)用字符串变量存放字符串例6.8(3)用字符指针指向一个字符串例6.9第5章 利用数组处批量数据6.4 字符串与指针 例6.10 将字符串str1复制为字符串str2。第5章 利用数组处批量数据6.5 函数与指针 指针变量可以指向一个函数。一个函数在编译时被分配给一个入口地址,这个函数入口地址就称为函数的指针。 例例6.11 6.11 求a和b中的大者。(1)一般方法(2)函数指针方法函数指针变量的一般定义形式:函数类型 (*变量名)(函数形参表)第5章 利用数组处批量数据6.6 返回指针值的函数 指针函数:即返回指针值的函数。 定义指针函数的一般形式: 类型名 *函数名(参数表

9、列) 例如: int *p(int x,int y);第5章 利用数组处批量数据6.7 指针数组和指向指针的指针6.7.1 指针数组 指针数组:即数组元素均为指针类型数据。 定义指针函数的一般形式: 类型名 *数组名数组长度; 例如: int *p4; 注:注:intint ( (* *p)4;p)4;是指向一维数组的指针变量。是指向一维数组的指针变量。 例6.12 若干字符串按顺序(由小到大)输出。第5章 利用数组处批量数据6.7.1 指针数组 程序分析:第5章 利用数组处批量数据6.7.2 指向指针的指针 定义指向指针数据的指针变量实例: char *(*p); 或 char *p; p为

10、指向指针的指针。如图6.18所示。 第5章 利用数组处批量数据6.7.2 指向指针的指针 例6.13 指向字符型数据的指针变量。 编写程序:第5章 利用数组处批量数据6.8 const指针1.指向常量的指针变量 定义此种指针变量的一般形式为: const const 类型名类型名 * *指针变量名指针变量名 说明:不允许通过指针变量改变它指向的对象的值。例如: int a=12,b=15; const int *p=&a;定义了p为指向整型变量a的const指针变量*p=15;试图通过p改变它指向的对象a的值,非法非法 a =15; 合法合法例6.14 在函数中改变指针形参所指对象的值

11、。第5章 利用数组处批量数据6.8 const指针2.常指针 定义一般形式: 类型名 *const 指针变量名 指定指针变量的值是常量,即指针变量的指向不能改变。例如:又如: char *const pl=“China”;/pl是字符指针变量,其指向不能改变是字符指针变量,其指向不能改变Pl=“Canada”;试图改变pl的指向,不合法不合法 int a =4; int b=6; int *const p2=&a;/指向p2只能指向变量a p2 =&b;/试图改变p2的指向,不合法不合法说明:说明:(1)常指针值不能改变。(2)必须定义时初始化。(3)指针变量的指向变量的值可以

12、改变。(4)注意const和*位置。第5章 利用数组处批量数据6.8 const指针3.指向常量的常指针 定义一般形式为: const 基本类型名 *const 指针变量名 即指针变量指向一个固定的对象,该对象的值不能改变(指不能通过指针变量改变该对象的值)。例如: 第5章 利用数组处批量数据6.9 voidt指针类型 void指针变量:不指向任何类型的数据。 说明说明: 可以把非void型的指针赋给void型指针变量,但不能把void指针直接赋给非void型指针变量,必须先进行强制转换。第5章 利用数组处批量数据6.9 void指针类型 void指针变量:不指向任何类型的数据。 说明说明:

13、可以把非void型的指针赋给void型指针变量,但不能把void指针直接赋给非void型指针变量,必须先进行强制转换。第5章 利用数组处批量数据6.10 有关指针的数据类型和指针运算的小结6.10.1 有关指针数据类型的小结 第5章 利用数组处批量数据6.10 有关指针的数据类型和指针运算的小结6.10.2 指针运算小结 (1)指针变量加/减一个整数,如p+,p-,p+i,p+-i,p-=i等。 (2)指针变量赋值 将一个变量地址赋给一个指针变量,如: (3)指针变量可以有空值,即该指针变量不指向任何变量,可以这样表示: p =NULL; (4)两个指针变量可以相减 如果两个指针变量指向同一个

14、数组的元素,则两个指针变量值之差是两个指针之间的元素个数。第5章 利用数组处批量数据6.10 有关指针的数据类型和指针运算的小结6.10.2 指针运算小结 (5)两个指针变量比较 若两个指针指向同一个数组的元素,则可以进行比较,指向前面的元素的指针变量小于指向后面元素的指针变量。 (6)对指针变量的赋值应注意类型问题。第5章 利用数组处批量数据6.11 引用6.11.1 什么是变量的引用 变量的引用作用:为一个变量起一个别名。如: int a; /定义a是整型变量 int &b =a; /声明b是a的“引用”,& &是引用声明符声明符,而不代表地址地址。 注意: (1)

15、引用不是一种独立的数据类型。对引用只有声明,没有定义。必须先定义一个变量,然后声明对该变量建立一个引用(别名)。 (2)声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量。 (3)在声明一个引用后,不能再使之作为另一变量的引用。 int a1,a2; int &b =a1;/声明b是a1的引用 int &b =a2;/试图使b又变成a2的引用,不合法不合法第5章 利用数组处批量数据6.11 引用6.11.1 什么是变量的引用 (4)不能建立引用数组。如 (5)不能建立引用的引用,也没有引用的指针。如 (6)可以取引用的地址,如int *pt; pt=&b; (7

16、)区别引用声明符&和地址运算符&。 int a5; int &b5 =a;/错误错误,不能建立引用数组 int &b =a0;/错误错误,不能作为数组元素的别名 int a3; int &b =a;/声明b是a的别名,正确正确 int &c =b;/试图建立引用的引用,错误错误 int &b =a;/声明声明b是是a的别名,的别名,正确正确 cout&bendl;/输出b的地址,此处&a不是引用第5章 利用数组处批量数据6.11.2 引用的简单使用 例6.15 通过引用得到变量的值。 第5章 利用数组处批量数据6.11.3 引用作为函数参数 (1)将变量名作为

温馨提示

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

评论

0/150

提交评论