c++(指针和引用).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c(指针和引用)

指针与引用 指针是C++中的一个重要概念,利用指针,可以操纵数据对象的内存地址,实现对数据对象的间接访问,表示复杂的数据结构,编写简洁高效的程序。 引用是某个数据对象的别名,C++中引进引用这一概念的目的是为了简化函数调用时的参数传递,因此,引用经常出现在函数的参数和返回值中。 一 指针与指针变量的概念 1、指针的基本概念 计算机内存由一系列的内存单元(在微型计算机中通常是一个字节)构成,这些内存单元被连续地编址。于是,每个内存单元有一个惟一的地址。 在程序执行过程中,对于程序中定义的每个变量,C++系统会根据变量的类型,在内存中分配由若干个地址连续的内存单元组成的存储单元,用于存放变量的值。变量的类型不同,存储单元的大小(内存单元数)也不相同。 我们把某变量的存储单元的首内存单元的地址称为该变量的地址,可以用地址运算符“”来获取变量的地址。例如,若定义 int k=3; float f=3.14; 则k表示变量k的地址,f表示变量f的地址。由于变量的地址指明了变量的存储位置,所以被说成是“指向”变量,并形象地称为变量的指针。 另外,我们可以定义变量来存放某个数据对象的指针,这种用来存放数据对象指针的变量称为指针变量。如果指针变量P中存放了数据对象v的地址(指针),则称p指向数据对象v,或者称p是指向数据对象v的指针变量。 这样一来,我们访问内存中的数据对象就有了两种方法。 第一种是用变量名访问。由于编译系统在对源程序编译时,会自动将变量名映射为它所在的存储单元的地址。因此,用变量名访问时,用户不必关心变量的实际地址,只要在程序中给出变量名,由计算机将变量名映射为内存地址,再有地址对内存中的数据对象进行存储。 另一种是用指针访问,即利用指向数据对象的指针变量来访问。具体地说就是,先由指针变量的值得到数据对象的存储地址,再根据该地址来存取数据对象。很显然,这是一种间接访问方式。 值得特别注意的是,虽然指针变量和普通变量都代表内存中的某个存储单元,在内存中都被映射为地址,但是普通变量的存储单元中存放的是数据,而指针变量的存储单元存放的是地址。 2 定义指针变量 C++规定所有变量在使用前务必先定义,指针变量也不例外。定义指针变量的语法格式如下: 类型 *指针变量名1,*指针变量名2,…,*指针变量名m; 其中,“*”是说明符,说明其后的标志符是个指针变量,“类型”表示本指针变量所指向的数据对象的数据类型。例如: int *p1; //p1是一个指向int型数据对象的指针变量 float *p2; //p2是一个指向float型数据对象的指针变量 char *p3; //p1是一个指向char型数据对象的指针变量 另外,还可以在定义指针变量的同时,对其进行初始化,使其指向某一数据对象。例如: int k,*p1=k; //p1指向int型变量k 在对指针初始化时,要先定义对象。比如下例就是错误的: char *p3=c,c; //错误 这是因为编译char *p3=c时,变量c还未安排存储单元,它的地址不存在。 在C++程序中,我们还可以根据需要,用赋值的方法不断改变指针变量指向的数据对象。例如: int a,b,c,*p1=a; … p1=b; … p1=c; 但是,要注意的是一种类型的指针只能指向同类型的数据对象。例如: int *p; char c; p=c;//错误。p为int型,c为char型 是错误的。原因在于int型的指针指向了char型数据对象。同样地,不同类型指针之间不能进行赋值操作。例如: int a,*p1; char c,*p2=c; p1=p2; 是错误的。如果必须把p2的值赋给p1,使p1指向char型变量c,可以通过强制类型转换的方法。 p1=(int *)p2; 有人可能会问,既然任何类型的指针都可以指向内存中的任一位置,为什么还要规定指针的数据类型呢?因为指针的所有运算都与它指向的数据对象的类型密切相关,所有C++规定一种类型的指针只能指向同类型的数据对象。 3 用指针访问变量 在用初始化或赋值方式使指针变量指向某一数据对象后,我们可以借助于指针运算符“*”(或称间接访问运算符)来存取该数据对象。指针运算符“*”的语法格式为: * 指针变量 它用来表示指针变量所指向的同类型的数据对象。例如: int a=3,b=2,c=1,*p=a; cout*p; //p指向a,*p表示a p=b; cout*p; //p指向b,*p表示b p=c; cout*p; //p指向c,*p表示c 该程序的输出结果是:321。 对于指向结构体变量(或共用体变量)的指针,可以使用成员运算符“.”或指向运算符“-”,来访问它所指向的结构体变量(或共用体变量)的成员。例如:

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档