第6章指针(6.7)

上传人:飞*** 文档编号:3968752 上传时间:2017-08-05 格式:PPT 页数:20 大小:730.50KB
返回 下载 相关 举报
第6章指针(6.7)_第1页
第1页 / 共20页
第6章指针(6.7)_第2页
第2页 / 共20页
第6章指针(6.7)_第3页
第3页 / 共20页
第6章指针(6.7)_第4页
第4页 / 共20页
第6章指针(6.7)_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《第6章指针(6.7)》由会员分享,可在线阅读,更多相关《第6章指针(6.7)(20页珍藏版)》请在金锄头文库上搜索。

1、第六章 指针,王卫红,指针的概念;,指针变量;,指针运算;,指针与数组;,引用变量;,动态存储分配,本章主要内容:,知识点回顾,指针变量的定义 定义形式:类型名 *指针变量名=, ;指针运算符*,地址运算符&取地址运算符只能作用于变量:&x, &a5;不能把整数赋值给一个指针变量;不能把一个指针变量的值赋值给一个整型变量:x=ip;注意指针在使用之前,要先进行赋值,否则不确定。只能是同类型变量的地址进行赋值;可以将数组名或函数名赋给某些类型的指针变量;不能将一个整型量(或任何其它非地址类型的数据)赋给一个指针变量;也不能把指针变量的值赋值给整型变量;分析有关指针的程序时,画图是很好的方法:,指

2、针数组的定义形式为: 数据类型 *指针数组名元素个数;,指针的数据类型,int *p,p为指向整型数据的指针变量,char *p,p为指向字符型数据的指针变量,int (*pa)n,char *apn,char *pp,指向字符型指针的指针变量,返 回,指针数组:具有n个元素的一维数组,各元素都是指向字符型数据的指针变量,pa为指向一维数组的指针变量(指向具有n个元素的一维数组),为一数组指针,const int *p,int * const p,指针变量的引用方法:,将变量的地址赋给指针变量(p1=&a1),将一个指针变量赋给另一个指针变量(p2=p1),通过指针变量间接访问它所指向的变量(

3、*p1),*和&运算符的进一步说明:,若有:p1=&a; 则*p1等价于a;,&*p1,&(*p1),&a, *&a,*(&a),*p,a,(*p)+,等价于: a+,不同于:*p+,*p+,*(p+),数组第 i 个元素地址的表示方法:,&ai, a+i, p+i, &pi,数组第 i 个元素的表示方法:,ai, *(a+i), *(p+i), pi,引用一个数组元素的两种方法:,、下标法:用ai或pi来引用数组a中的第i号元素;,、指针法:用*(p+i)或*(a+i)来引用数组中的第i号元素;,可见:任何由数组下标完成的操作都能由指针来实现;,ai,*(p+i),&ai,p+i,指针运算

4、=、*、&+、-+、-+=、-=、!=、=,(a) x=*p+;(b) x=*+p;(c) x=(*p)+;(d) x=+(*p);,注意指针变量的运算:,若p指向数组的开始,即:p=a;,、p+; 使p指向下一元素,即a1;,、*p+; 等价于*(p+);,for (i=0,p=a; i10; i+) cout *p+;,、注意*(p+)与*(+p)的区别;,、(*p)+表示p所指向的元素值加1;,、若指针变量指向数组的第i号元素,则:,*(p-)相当于ai-,*(-p)相当于a-i,*(+p)相当于a+i,1、二维数组的性质,int a34=1,3,5,7, 9,11,13,15, 17,

5、19,21,23;,可以认为a是具有3个元素的一维数组:a0、a1、a2;,a0,a1,a2,每个元素又是具有4个整型元素的一维数组。,2. 二维数组的指针,二维数组具有首地址、行地址、元素地址等相关指针。,对于二维数组,相当于一张二维表格,存储按行按列存放。,二、指针与二维数组,、数组名a表示地址,a0,a1,a2,从二维数组的角度来看,a为二维数组名,表示整个二维数组的首地址。数组名是指针常量,若把a看成一维数组,每个数组元素a0、a1、a2占 个 字节。,16,a表示a0的地址(&a0: 2000);,a+1表示的地址();,a+1,&a1,a1,&a1:,2016,a+2表示的地址()

6、;,a+2,&a2,a2,&a2:,2032,a+1表示:a+161=2016,a+2表示:a+162=2032,a+i表示:a+16i,a+i表示ai的地址&ai,即第i行的地址,它是指向一维数组的指针。,3、说明:,、ai表示地址,a0、a1、a2是一维数组名。,a0是一维数组a0的首地址,即第0行一维数组中第0列元素的地址(&a00);即a0的值为&a00;,a1是一维数组a1的首地址,即第1行一维数组中第0列元素的地址(&a10);即a1的值为&a10;,a2是一维数组a2的首地址,即第2行一维数组中第0列元素的地址(&a20);即a2的值为&a20;,因此,ai是第i行首元素的地址(

7、指针),它是指向数组元素的指针。,a0,a1,a2,、ai+j表示地址:,ai是第i行首元素的地址。,a0+1表示第0行第1列元素的地址;,&a01,a0+2表示第0行第2列元素的地址;,&a02,a2+3表示第2行第3列元素的地址;,&a23,第i行第j列元素的地址(&aij);,、*(a+i)表示地址:,*(a+i)等价于ai,第i行首元素的地址,、*(a+i)+j表示地址:,*(a+i)+j等价于ai+j,第i行第j列元素的地址,、数组元素aij的表示:,若i=0,a0j可表示为:,*(a0+j)、*(*a+j)、(*a)j,若j=0,ai0可表示为:,*(ai)、*(*(a+i)、(*

8、(a+i)0,ai+j,*(a+i),+j,*(a+i),*( ),*( ),( ),j,一个变量可以声明为一个引用,它起着该变量的别名的作用。 对引用进行操作,实际上就是对被引用的变量进行操作。 引用运算符为&,定义的一般形式为:,数据类型 & 引用变量名=变量名;,例如: int num; int & ref = num;,ref 被定义为一个int型引用,并初始化为对整型变量num的引用。即为整型变量num取一个别名ref,ref就称为对num的引用,num称为ref的引用对象。,注意:必须进行初始化,即由已有的同类型变量对其进行初始化,之后,前者是后者的一个别名,6.5 引用变量,#i

9、nclude void main() int num=50; int & ref=num; ref+=10; coutnum=numendl; coutref=refendl; num+=40; coutnum=numendl; coutref=refendl; ,注:一个变量被定义为引用时必须进行初始化; 引用不是变量,所以引用本身不能被修改,在程序中对引用的存取都是对它所引用的变量的存取。 引用与指针不同。指针的内容或值是某一变量的内存单元地址,而引用则与初始化它的变量具有相同的内存单元地址。,例6.5.1: 引用举例。,1、要注意区分引用运算符和地址运算符的区别。,int num=50;

10、,int &ref=num;,int *p=&ref;,例如:,第二句的“&”为引用运算符,将ref初始化为整型变量num的引用。,而第三句中的“&”是地址运算符,是将引用ref的地址赋给指针变量p,则变量p的内容实质是变量num的地址。,2、引用主要用于定义函数参数:,例如:,int Add(int &x, int &y) return x+y ;int a=5, b=8, c; c=Add(a, b);,返 回,在一般情况下,一旦定义了一个数组,则不论这个数组是全局的还是局部的,在编译时他的大小就确定了。这是因为在定义数组时必须声明它的大小,在程序运行过程中不能再动态改变,这就是所谓的静态

11、分配 。但是在编写程序时,有时我们不能确定数组应该定义为多大,如果定义多了就会浪费内存空间,有时只能在运行时才能确定使用多大数组来存储数据,因此这时在程序运行时需要从系统中动态地获得内存空间,这就是所谓的动态分配 。,c+提供了两个运算符new和delete,可来分配和释放内存空间。,6.6 动态存储分配,new 类型名 ( 初值表达式 )new 类型名 数组长度 ,new运算格式:,(1) new int; /4B(2) new char(a) /1B(3) new char20,如:int *p=new int;*p=20; (*p)+; /*p=21int *a=new int n; /

12、讲数组的首地址赋给aa3=4,动态存储分配,将返回动态分配存储空间的地址,该地址必须赋给一个指针变量,运算结果必须赋给指针变量才能够间接访问动态对象,例如:,1、动态空间的分配:,2、动态空间的释放:,如:delete p; delete a;,delete运算格式:,delete 指针变量delete 指向动态数组的指针,即释放的是p或a所指向的动态数据空间或数组空间,而并不释放p或a所分配的指针空间,因为它们是由变量定义语句定义实现的,占4B。一般在程序段或程序结束是要释放,在使用new和delete运算符时,应注意:, 用new获取的内存空间,必须用delete释放。, 对一个指针只能调用一次delete。, 用delete运算符的对象必须使用new分配的。,实验五:指针、引用其应用,一、实验目的:1掌握指针变量的定义、使用。2使用指针进行数组操作。3使用指针进行字符串操作。4了解二级指针的概念及其使用方法。,二、实训步骤、方法与要求,1从键盘输入 10 个字符串,利用字符指针数组实现按照字典顺序将其排序输出。2使用指针与引用实现两个变量,比较并输出两个变量的大小。3验证教材例题与习题,

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

当前位置:首页 > 高等教育 > 其它相关文档

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