




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-2-3-2000022002int a;-4-p取变量地址运算符:取变量地址运算符:& &sVarsVar。ptt为转义字符,输出一个制表符。为转义字符,输出一个制表符。 用于输出用于输出 ,输出双引号,输出双引号, 输出输出 单引号单引号p每个变量都有确定的地址每个变量都有确定的地址p编译器确定应分配内存编译器确定应分配内存 的数量,及对应的地址的数量,及对应的地址p程序员不用关心地址的细节,程序员不用关心地址的细节, 只需知道如何访问变量即可只需知道如何访问变量即可-5-p定义变量时,变量名定义变量时,变量名pAgepAge前面的前面的* *,表示,表示pAgepAge是一个变量,是一个
2、变量, 用来存储一个整型变量的地址,用来存储一个整型变量的地址, 编译器会为指针变量分配内存单元。编译器会为指针变量分配内存单元。p指针变量的类型:可保存其地址的变量数据类型。指针变量的类型:可保存其地址的变量数据类型。pNULLNULL为预定义常量,表示空指针,为预定义常量,表示空指针,NULLNULL通常等价于通常等价于0 0。p良好编程习惯:定义指针变量时应对其执行初始化,未初良好编程习惯:定义指针变量时应对其执行初始化,未初 始化的指针称为野指针,非常危险。始化的指针称为野指针,非常危险。-6-p指针变量中存储的地址值实际上是一个整数值,但不能将指针变量中存储的地址值实际上是一个整数值
3、,但不能将 整数值直接赋值给指针变量。整数值直接赋值给指针变量。p赋值时,取地址的变量类型必须与指针变量类型一致。否赋值时,取地址的变量类型必须与指针变量类型一致。否 则编译器报错。则编译器报错。-7-8-9-10-11-12-void swap( int *x, int *y )int temp; temp = *x;*x = *y;*y = temp;std:cout *x , *y std:endl;#include void swap( int *a, int *b );int main()int a = 3, b = 2;swap(&a, &b);std:cout a , b std
4、:endl;return 0;-13-p指针变量指针变量papa指向数组指向数组a ap传递数组的本质上只是传递数组起始地址,在传递数组的本质上只是传递数组起始地址,在averageaverage 函数中,通过指针变量间接访问数组元素。函数中,通过指针变量间接访问数组元素。p指针变量指针变量papa指向数组指向数组a+1a+1-14-或者或者pk=k;或者或者( int *array, int size);或者(或者(int *, int );-15-p数组本身并不包含数据元素个数的信息,传递数组或指针数组本身并不包含数据元素个数的信息,传递数组或指针 时,往往传递辅助参数表示元素个数。时,往
5、往传递辅助参数表示元素个数。或者或者sum += *(array + i);int *p ;for(p = array; p array + size ; p+)sum += *p;-16-17-18-p局部变量随着函数的返回被丢弃,无法再访问。局部变量随着函数的返回被丢弃,无法再访问。p全局变量存在于整个程序的运行期间,整个程序中都能全局变量存在于整个程序的运行期间,整个程序中都能 访问,但全局变量容易出错、难以理解与维护,避免使用。访问,但全局变量容易出错、难以理解与维护,避免使用。-19-20-p从堆中分配可存储从堆中分配可存储1 1个个intint数据的空间。数据的空间。p堆中分配的内
6、存,没有对应的变量,只能通过指针间接访问堆中分配的内存,没有对应的变量,只能通过指针间接访问p从堆中分配内存可能会失败,使用指针前一定要判断是否从堆中分配内存可能会失败,使用指针前一定要判断是否 分配成功。老式编译器失败后返回分配成功。老式编译器失败后返回NULLNULL指针,新的编译器指针,新的编译器 会抛出异常(后面讨论)。会抛出异常(后面讨论)。-21-p分配堆空间时,可以指定分配数据的数量,从而请求可保存分配堆空间时,可以指定分配数据的数量,从而请求可保存 多个数据的存储空间。多个数据的存储空间。p* *pPointerpPointer访问所指向的第一个数据,访问所指向的第一个数据,*
7、 *(pPointer+n)(pPointer+n)访问之访问之 后的第后的第n n个数据,注意不能超过所分配的内存界限。个数据,注意不能超过所分配的内存界限。-22-p动态请求的多个数据,如果只使用动态请求的多个数据,如果只使用deletedelete释放,将造成内存释放,将造成内存 泄漏。泄漏。-23-24-pdeletedelete指针后,该指针将成为悬摆指针(或野指针、迷失指针后,该指针将成为悬摆指针(或野指针、迷失 指针),解析或再次指针),解析或再次deletedelete该指针,会导致程序崩溃。该指针,会导致程序崩溃。p良好编程习惯:对指针执行运算前,判断该指针是否为良好编程习惯
8、:对指针执行运算前,判断该指针是否为NULLNULL-25-2000pa52000pdeletedelete只是释放只是释放papa所指向的堆空间,对指针所指向的堆空间,对指针papa本身没有任何本身没有任何 影响。此时影响。此时papa仍然指向原先的内存位置,变成了野指针。仍然指向原先的内存位置,变成了野指针。ppapa是位于栈中的局部变量,是位于栈中的局部变量,funfun返回后返回后papa由系统自动销毁。由系统自动销毁。-26-ppNumberpNumber指向新分配的存储空间后,原先分配的内容为指向新分配的存储空间后,原先分配的内容为7575的的 内存无法访问,也无法再释放!内存无法
9、访问,也无法再释放!-27-2000 pa52000-28-29-p创建对象时会调用类的构造函数,此处调用缺省构造函数创建对象时会调用类的构造函数,此处调用缺省构造函数p每当在栈中或堆中创建对象时,都将调用构造函数。每当在栈中或堆中创建对象时,都将调用构造函数。p执行执行deletedelete操作后,将调用对象的析构函数,然后释放堆操作后,将调用对象的析构函数,然后释放堆 中的内存(对象本身)。中的内存(对象本身)。-30-2000 myRectangleRectangle *my Rectangle = new Rectangle;. /使用使用my Rectangledelete myR
10、ectangle;300430002000 lengthwidth523000-31-32-33-34-prSomeIntrSomeInt是一个是一个intint引用,被初始化指向引用,被初始化指向someIntsomeInt。p将来对将来对rSomeIntrSomeInt的操作都等价于对的操作都等价于对someIntsomeInt的操作。的操作。-35-36-37-prSomeIntrSomeInt仍然引用的是仍然引用的是someIntsomeInt,通过赋值运算符,只是,通过赋值运算符,只是 将将anotherIntanotherInt的值赋给的值赋给rSomeIntrSomeInt,也就
11、是,也就是someIntsomeInt。-38-39-40-41-prxrx和和ryry是是x x和和y y的引用,调用的引用,调用swapswap时没有创建新的局部变时没有创建新的局部变 量,对量,对rxrx和和ryry的操作就是对的操作就是对x x和和y y的操作。的操作。#include void swap( int &rx, int &ry );int main()int x=5, y=10;swap(x, y);std:cout x “ , y std:endl; return 0;-42-43-p返回多个值(引用)返回多个值(引用)pflagflag记录计算结果是否越界记录计算结果
12、是否越界 如返回如返回truetrue表示计算成功,表示计算成功, 返回返回falsefalse表示计算失败。表示计算失败。p通过传入的引用将计算结果保存通过传入的引用将计算结果保存 到引用的变量。到引用的变量。-44-45-46-47-p为含有指针成员的类编写构造与析构函数。为含有指针成员的类编写构造与析构函数。-48-p在构造函数中分配内存,在析构函数中释放内存。在构造函数中分配内存,在析构函数中释放内存。p在堆中分配内存时,通过在堆中分配内存时,通过()()可以指定初始值,将可以指定初始值,将itsAgeitsAge所所 指单元初始化为指单元初始化为2 2,将,将itsWeightits
13、Weight所指单元初始化为所指单元初始化为5 5。pint int * *p=new intp=new int,分配,分配1 1个数据个数据 不初始化不初始化pint int * *p=new int(2)p=new int(2),分配,分配1 1个个 数据,初始化为数据,初始化为2 2pint int * *p=new int10p=new int10,分配,分配1010 个数据,不初始化。个数据,不初始化。-49-p程序员无需维护程序员无需维护thisthis指针的创建和销毁,由编译器完成。指针的创建和销毁,由编译器完成。-50-51-p三种形式的含义不同三种形式的含义不同p若若cons
14、tconst位于位于* *号左侧,表示指向内容为常量(内容受保护)号左侧,表示指向内容为常量(内容受保护) 若若constconst位于位于* *号右侧,表示指针本身为常量(指针受保护)号右侧,表示指针本身为常量(指针受保护)-52-ppOne:pOne:指向整型常量的指针,通过指向整型常量的指针,通过pOnepOne不能修改所指向变量不能修改所指向变量 的值;但可以指向别的整数。的值;但可以指向别的整数。-53-ppTwo:pTwo:指向整型的常量指针,指向整型的常量指针,pTwopTwo不能再指向其它变量,不能再指向其它变量, 但可以通过指针修改所指向变量的值。但可以通过指针修改所指向变量
15、的值。-54-ppThree:pThree:指向整型常量的常量指针,指向整型常量的常量指针,pThreepThree不能再指向其它不能再指向其它 变量,通过指针也不能修改所指向变量的值。变量,通过指针也不能修改所指向变量的值。-55-例例7-13完整源代码完整源代码-56-【例例7-14-1】对象的值作为函数的参数对象的值作为函数的参数【例例7-14-2】对象的指针作为函数的参数对象的指针作为函数的参数【例例7-14-3】对象的引用作为函数的参数对象的引用作为函数的参数-57-p调用函数时创建调用函数时创建theCattheCat,调用复制构造函数复制,调用复制构造函数复制myCatmyCat
16、 内容;函数返回后调用析构函数,并销毁内容;函数返回后调用析构函数,并销毁theCattheCat。p函数返回时创建临时对象,调用复制构造函数复制函数返回时创建临时对象,调用复制构造函数复制 theCat theCat的内容;最后要析构并销毁临时对象。的内容;最后要析构并销毁临时对象。-58-ptheCattheCat只是局部指针变量,接收只是局部指针变量,接收myCatmyCat的地址,不会的地址,不会 引起对象的复制构造以及返回后的析构函数调用。引起对象的复制构造以及返回后的析构函数调用。p函数返回临时指针变量,保存的是函数返回临时指针变量,保存的是theCattheCat存储的地址存储的
17、地址 值,不会引起对象的复制构造以及析构。值,不会引起对象的复制构造以及析构。p指针变量占用的存储空间较少,可以忽略。指针变量占用的存储空间较少,可以忽略。-59-ptheCattheCat是是myCatmyCat的引用,不会引起构造及析构。的引用,不会引起构造及析构。p返回的临时引用是返回的临时引用是theCattheCat的引用,也就是对的引用,也就是对myCatmyCat的的 引用,不会引起构造与析构。引用,不会引起构造与析构。p传递引用不会创建新的对象,引用只是别名。传递引用不会创建新的对象,引用只是别名。-60-61-62-63-p通过传入的通过传入的triketrike对象,创建和
18、对象,创建和triketrike“相同相同”的新对象。的新对象。-64-65-66-67-p构造函数中分配内存,析构函数中释构造函数中分配内存,析构函数中释 放内存。放内存。p默认复制构造函数中,不会分配内存默认复制构造函数中,不会分配内存 只是执行只是执行speed = rhs.speedspeed = rhs.speed。-68-ppedalpedal中通过中通过setSpeedsetSpeed设置新速度,也可以直接修改数据设置新速度,也可以直接修改数据 * *speed += 1speed += 1,但通过调用,但通过调用setSpeedsetSpeed可以隐藏实现细节。可以隐藏实现细节。p更进一步:更进一步:setSpeed ( getSpeed()+1 ); setSpeed ( getSpeed()+1 ); 不用关心不用关心speedspeed 到底是如何存储等实现细节。到底是如何存储等实现细节。-69-p复制构造后,新创建的复制构造后,新创建的dallasda
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业无人机租赁服务平台的用户需求与满意度调查报告
- 房屋拆除工程防护方案(3篇)
- 农业无人机植保作业效率2025年提升策略及案例分析报告
- 东莞亮化工程方案(3篇)
- 安全教育常培训课件
- 安全教育工作培训课件
- 安全教育家长培训课件
- 农业品牌建设2025年资金申请流程与注意事项报告
- 辽宁国企面试题库及答案
- 乐亭二中面试题库及答案
- 中医面诊升级版
- 消化内科入科培训
- 四川省普通高中2024届高三上学期学业水平考试数学试题(解析版)
- 《office培训教程》课件
- 心内科常用药物王芳
- 全国优质课一等奖小学四年级教科版科学《声音是怎样产生的》公开课课件(内嵌音频视频)
- 部编(统编)版语文二年级上册每课练习题(全册)
- 电信云网工程师-云网融合(客户IT上云)备考试题库(集团网大版)
- 《新媒体导论》(第二版)课件全套 -第1-9章 理解新媒体:多重属性的复合-新媒体文化:流动的亚文化
- 阿那亚分析研究报告
- 电梯术语中英文对照表
评论
0/150
提交评论