面向对象编程技术第六章指针.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《面向对象编程技术第六章指针.ppt》由会员分享,可在线阅读,更多相关《面向对象编程技术第六章指针.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 数组、指针与字符串数组、指针与字符串本章主要内容本章主要内容1.数组2.指针3.动态存储分配4.字符串:/自学5.深拷贝与浅拷贝/后面专题讲解注意存储格式和长度数组数组1.数组的概念2.数组的定义与使用3.数组作为函数参数4.对象数组返返 回回数组的概念数组的概念书上定义:书上定义:数组是具有一定顺序关系的若干相同类型对象的集合体,组成数组的对象称为该数组的元素。注:1.数组属于构造类型2.数组可用于实现线性表的顺序存储3.元素类型是除void之外的任何类型返返 回回数组的定义与使用数组的定义与使用定义格式:定义格式:数据类型 数组名常量表达式1常量表达式2 常量表达式3使用使用
2、:访问数组元素 数组名下标表达式1 下标表达式2下标表达式3 例:int A34;A23=9;注意:注意:1.数组下标从0开始2.数组定义中的每一维的大小应是常量 如:int k9;int Ak;/编译时会出错!编译时会出错!Why?3.数组元素按行序优先进行存储,注意多维数组的情形4.数组元素可以在定义时初始化,初始化也可以以行为单位进行初始化下页例子:数组元素可以在定义时初始化数组元素可以在定义时初始化分行给二维数组赋初值例如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;将所有数据写在一个内,按顺序赋值例如:static int a34=1,2,3,
3、4,5,6,7,8,9,10,11,12;可以对部分元素赋初值例如:static int a34=1,0,6,0,0,11;返返 回回数组作为函数参数数组作为函数参数1.情形一:数组元素作实参情形一:数组元素作实参 与处理单个变量相同2.情形二:数组名作参数情形二:数组名作参数 形、实参数都应是数组名,类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组,是传数组首地址数组首地址调用如何看到传递参如何看到传递参数的方式,传值、数的方式,传值、传地址?传地址?例:例:int A5=1,2,3,4,5;void access_elem(int x)coutxendl;void ac
4、cess_array(int A,int n)A0=9;for(int i=0;In;i+)coutAi;coutendl;Void main()int A5=1,2,3,4,5;Access_elem(A3);Access_array(A,5);cout“A0=:”A0endl;或者*(Ai)返返 回回对象数组对象数组定义:定义:类名 数组名元素个数;访问方法:访问方法:通过下标访问 数组名下标.成员名例:Point P_ay10;P_ay1.x=1;P_ay1.y=2;对象数组初始化对象数组初始化1.数组中每一个元素对象被创建时,系统都会调用构造函数初始化该对象。2.通过初始化列表赋值。例
5、:Point A2=Point(1,2),Point(3,4);3.如果没有为数组元素指定显式初始值,数组元素便使用缺省值初始化(调用缺省构造函数)。构造函数与数组构造函数与数组数组元素所属类的构造函数数组元素所属类的构造函数1.各元素对象的初值要求为相同的值时,可以声明具有缺省缺省形参值形参值的构造函数。2.各元素对象的初值要求为不同的值时,需要声明带形参(无缺省值)的构造函数。3.当数组中每一个对象被删除时,系统都要调用一次析构函数。下页举例下页举例例例6-3 对象数组应用举例(对象数组应用举例(P155)/Location.h#if!defined(_LOCATION_H)/这样条件编译
6、的目的#define _LOCATION_Hclass Location public:Location();Location(int xx,int yy);Location();void Move(int x,int y);int GetX()return X;int GetY()return Y;private:int X,Y;#endif/Location.cpp#include#include Location.hLocation:Location()X=Y=0;coutDefault Constructor called.endl;/显示构造信息Location:Location(i
7、nt xx,int yy)X=xx;Y=yy;cout Constructor called.endl;Locatuon:Location()coutDestructor called.endl;/显示析构信息void Location:Move(int x,int y)X=x;Y=y;int main()coutEntering main.endl;Location A2;for(int i=0;i2;i+)Ai.Move(i+10,i+20);coutExiting main.endl;return 0;运行结果:运行结果:Entering main.Default Constructor
8、 called.Default Constructor called.Exiting main.Destructor called.Destructor called.返返 回回指针指针1.指针的定义与使用2.二种特殊类型的指针3.指针运算4.指针的其它用法(包含结合对象的部分)返返 回回1.指针的定义与使用指针的定义与使用定义:数据类型*指针名;使用:1.初始化 指针名地址(如:&变量名)也可以在定义是初始化 2.访问:*指针名 代表指针所指向的内容 可以通过赋值来改变指针的指向 3.&的使用 (1)取地址 int*p=&i;(2)定义引用 int&r=i;(3)定义引用形参 void f(
9、int&ri);返返 回回2.指针的特殊用法指针的特殊用法1.指向常量的指针和常量指针(指针常量)指向常量的指针和常量指针(指针常量)指向常量:const 类型符*指针名;常量对象不可改变常量对象不可改变 常量指针:类型符号*const 指针名;指针值不可改变指针值不可改变 int j=300;const int i=100;/定义成int const i;也可以 const int *p1=&i;/指向常量的指针;写成 int const也可以,回忆常类型 p1=&j;/指向常量的指针也可以指向变量;j=6;/可以直接修改指向对象的值*p1=7;/错误,不可以通过指向常量的指针来修改指向对象
10、的值 errror:l-value specifies const object p1=&i;/指向常量的指针可以指向常量和变量*p1=9;/error!/int*const p2=&i;/指针常量:error C2440:initializing:cannot convert from const int*to int*const int*const p2=&j;/指针常量可以指向变量 int k;/p2=&k;l-value specifies const object*p2=999;/等价于j=999;/+*p1;coutnow j=:jendl;/+*p1出错!2.void 类型指针类
11、型指针void 类型指针是一种特殊的指针:(1)能指向任何数据类型 (2)可以通过C+中的强制转换用以赋值给向其它数据类型的指针。例:例:void*p;int i=9;p=&i;int*ip;ip=(int*)p;cout*ipendl;cout*pendl;/应改成cout*(int*)pendl;Error!不允许直接输出void 类型指针所指向的变量的值,需要类型转换int j;void*pp=&j;char c;pp=&c;float dd=900.87;pp=ⅆcout*(float*)ppendl;1.用变量地址作为初值时,该变量必须在指针初始化之前已说明过,且变量类型应与指
12、针类型一致。2.可以用一个已赋初值的指针去初始化另一 个指针变量。3.建议在定义指针变量的同时,进行初始化。注意:注意:返返 回回指针运算指针运算赋值运算 关系运算 =、算术运算:结合数组的指针运算1.数组的指针方式访问2.指针数组基本指针运算返返 回回指针运算指针运算赋值运算赋值运算 能将一个确切的内存地址值赋给指针,不能是普通整数。但可以赋值为整数0,表示空指针。例:int i=9;int*p1=&i;int*p2=0;但下面形式出错:int i=0;int*p3=i;/类型不匹配,整形与整形指针返返 回回指针运算指针运算关系运算关系运算可以实施=、!=、等基本关系运算基本前提:参加运算的
13、指针类型相同意义:意义:1.判断地址的高低。2.判断指针是否是空指针运行结果:p=:0 x0012FF50 ip=:0 x0012FF54p ipint*p,*ip;int a10;p=a;ip=a+1;coutp=:p ip=:ipendl;if(pip)coutp ipendl;返返 回回指针运算指针运算算术运算(、)算术运算(、)1.指针与整数的加减运算 指针 p 加上或减去 n,其意义是指针当前指向位置的前方或后方第 n 个数据的地址。运算的结果值取决于指针指向的数据类型2.指针加一,减一运算 指向下一个或前一个数据。例如:y=*px+相当于 y=*(px+)(*优先级低于后置+,自右
14、向左运算)注:可以通过数组来说明注:可以通过数组来说明返返 回回指针运算指针运算结合数组的指针运算结合数组的指针运算数组的指针表示方法 定义数组,数组名是一个指向数组元素的指针。定义n维数组,具有灵活的指针表示方法。如定义:int a5=1,2,3,4,5;则有:*a=a0,*(a+1)=a1,*(a4)=a4 如定义:int a55;则有:*a=a00;*(a+1)=a10;*(*(a+1)1)=a11;注意:不能写 a+或+a,因为a是数组首地址,是常量右值右值的问题返返 回回指针运算指针运算指针数组指针数组定义:定义:数组元素是指向相同数据类型的指针 格式:格式:类型名*数组名下标表达式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 技术 第六 指针
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内