第9章 指针与引用

第9章 指针与引用

ID:34519521

大小:273.99 KB

页数:48页

时间:2019-03-07

第9章 指针与引用_第1页
第9章 指针与引用_第2页
第9章 指针与引用_第3页
第9章 指针与引用_第4页
第9章 指针与引用_第5页
资源描述:

《第9章 指针与引用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第九章指针与引用在高级语言中,实现对内存单元操作的方式有两种。一是通过变量名,或者对象名和成员名;其次就是通过指针。使用指针可以获得高质量的代码,可以对内存中各种类型的数据进行快速处理,并且为函数之间的参数传递以及被调用函数通过返回参数返回多值提供简洁高效的手段。引用是给变量或对象赋以别名,引用的本质是将程序正文中的多个标识符与同一内存单元之间建立起了一种多对一的映射关系。指针和引用的数据类型都是通过所指和所引用对象的数据类型派生而得,后者的数据类型称为指针和引用的基类型。9.1指针和引用的概念及其使用9.1.1指针和引用的概念指针首先是变量或对象,指针的特

2、殊之处在于它存放的是另一个变量或对象所在单元的起始地址。引用是C++为克服指针副作用引入的一种新的机制,引用可以理解为对象的别名。2.引用的概念在没有引入引用机制之前,程序正文的同一作用域范围内,一个对象名只能与唯一的一块内存单元相联系。程序正文中的标识符(即对象名)与内存单元之间的映射关系是一对一的。引入引用机制之后,允许在程序正文中通过引用为已有名字的内存单元声明新的名字,这个新名字称为该内存单元已有名字的引用名,俗称别名。从程序设计语言学的观点看,引用机制的引入使得程序正文中的标识符可以与内存单元之间建立起一种多对一的映射关系。使得一个已有名字和若干个

3、引用名字共同标识同样的内存单元。在C语言环境下,如果要在被调用函数环境中访问和操作调用环境中的变量,就必须通过指针来实现这种要求。但是有了引用机制之后,可以将已有名字作用于调用函数环境,而将对应的引用名字放在被调用函数环境之中,由于已有名字和引用名字标识的都是同样的内存单元,因此被调用环境中对引用名字的访问和操作实际就是对调用函数环境中对应对象的访问和操作,起到了与使用指针一样的效果。另外,引用名字不额外分配存储,对引用名字的操作都是对引用标识的内存单元的值操作,不存在地址的修改和变化问题,因此使用引用要比使用指针安全。这就是C++中引入引用机制的根本目的之

4、所在。9.1.2指针的声明指针要先声明,通过初始化或赋值使指针和被指对象之间建立指向关系。指针经过运算可以指向其他同类型的被指对象,并且可以通过指针来访问和操作其所指的对象。声明指针的一般形式是:cvT*cv标识符1,*cv标识符2,…,*cv标识符n;其中,T是数据类型。cv是const、volatile、或者constvolatile,它是可选项。*是单目操作符,用于将其操作数说明为指针类型(Theoperandoftheunary*operatorshallhavepointertype.)。T可以是基本类型,也可以是类类型。cv修饰符可以修饰数据类型

5、T,也可以修饰各个标识符;修饰产生的含义在下面的例子中进行解释。标识符1、标识符2、…、标识符n是单目操作符*的操作数。表达式:*标识符k(k=1,2,…,n)的作用是将标识符k说明为指针类型,至于是何种类型的指针,则是由T的类型决定。指针类型是一种派生类型,T称为指针类型的基类型。T的类型决定了指针所指对象的类型。1例9-3声明常量对象、常量指针、以及指向常量对象的常量指针,并解释其含义。constintc1=100,c2=200,*pc1=&c1,*constcpc1=pc1;这里,constint声明一个常整型数据类型。因此,整型对象c1和c2在被初始

6、化赋值为100和200之后,其值不能够修改。pc1被声明为一个整型指针,所指对象应该是整型常对象。本例中整型指针指向常对象c1,因此pc1是一个指向整型常对象的整型指针。由于pc1指向的是常对象,因此pc1指向的对象不能被修改,但是pc1本身的内容可以被修改。语句中*constcpc1将cpc1声明成为一个常量指针。所谓常量指针是指指针本身的值是不能修改更新的。再考虑前面的constint,则cpc1应该解释为指向整型常对象的整型常指针。这以为着,不仅cpc1的值不能更新,并且其所指对象c1的值也不能更新。一个对象被声明为常量对象又称为取消了该对象的可赋值特

7、性,它相当于将内存中对应的RAM单元定义为ROM。例9-4声明类类型指针,或声明类类型指针并对其初始化,并解释其含义。Location*Ptr;该声明语句声明一个Location类型的指针Ptr。也就是说:Ptr是一个对象指针,它可以指向Location类型的对象。LocationA(10,20),*Ptr=&A;该声明语句与下面的声明等价:LocationA(10,20);Location*Ptr=&A;声明语句将导致先调用Location类的有参构造函数创建Location类型的对象A,然后声明一个Location类型的指针Ptr,并且取出对象A的地址去

8、初始化Ptr,使Ptr指向Location类型的对象

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。