C++指针与引用.pptVIP

  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文档。上传文档
查看更多
第8章 指针和引用;8.1 指针及指针变量; 内存是内部存储器,由存储单元组成;存储单元连续;最小单位是字节。;假设在程序中说明了1个int型的变量a,其值为68。系统为变量a分配4字节的存储空间,设首地址为0X0065FDF4。通过地址0X0065FDF4就能找到变量a在内存中的存储单元,从而对变量a进行访问。 0X0065FDF4就是变量a的指针。知道一个变量的地址和变量的类型就能对变量进行访问,就如同知道房间号就能找到房间,从而找到房间里的主人。 指针是一种特殊的数据类型。所有类型的变量,在一次运行时都有确定的地址,因此它们都有指针。对于32位计算机,地址长度就是32位,因此一个指针需要4个字节,与整型int、浮点型float具有相同大小的长度。 一个指针不仅有值,而且还要确定其类型,表示它能指向什么类型的数据,决定了通过它要取用多少字节作为该变量的值。; 同一个变量在不同机器上执行或在不同时刻执行,其地址都不一样。在编程中不应该直接用一个地址常量来为一个指针赋值(切记!!!),所以对指针的操作应小心谨慎!!! 怎样能知道一个变量在运行时刻的内存地址?把取地址运算符放在变量前面就得到它的首地址。例如b是一个变量,那么b就表示它的地址。 ;局部变量在内存中的一些排列规律.,如图所示。 首先,这6个变量的地址是按递减次序排列,这是因为局部变量都存储在堆栈中,堆栈是先入后出的。如果这些变量改为全局变量,它们的排列次序就会颠倒过来。 其次,尽管变量s只用2字节,变量c只用1字节,却分别占用4字节空间。这是因为按字对齐(32位数据)能提高CPU访问内存的效率,而且一次压栈和出栈操作也是以32位数据为单位,代价是浪费一些内存。如果这些变量改为全局变量,它们将按实际大小存储。;8.1.2 指针变量 指针变量就是专门存放地址的一种特殊变量。指针变量中存放的是地址值。一个指针的值就是一个地址。 说明指针变量的格式为: 类型名 *变量名 [= 变量]; 其中,*表示这个变量是一个指针变量。这个变量的类型就是“类型名 *”。变量名是一个标识符。指针变量可以进行初始化,等号之后给出一个变量的地址,要求这个变量的类型与指针类型相符。 假设程序中说明了一个变量int i = 4,而且在运行时该变量i的地址为0X0012FF70。 说明一个指针变量:int * pa = i; 此时指针变量pa中就存放了变量i的地址,即pa中存放的值为0X0012FF70。; 现在访问变量i就有两种方式: 一是按变量名i来访问。将变量名i转换为一个相对地址,在运行时经动态定位得到i的地址0X0012FF70,再找到i的存储单元。 二是通过指针变量pa来访问。按pa变量的地址先找到pa,然后根据pa的值再找到变量i的存储单元,从而对变量i进行访问。 前一种访问方式称为直接寻址,后一种称为间接寻址。 间接方式的好处是一个指针pa在不同时刻可指向不同的整数变量,这样通过一个指针变量就能访问多个数据。 几种合法的指针写法: int *p; // *与类型名之间有空格,与变量名p之间没有空格 int* p1; // *与类型名之间没有空格,与变量名p1之间有空格 int*p2; // *与类型名和变量名p2之间都没有空格 int * p3; // *与类型名和变量名p3之间都有空格 在说明一个指针变量后,无论该指针变量指向何种类型的对象,系统都为其分配4个字节大小的存储空间。 Why? ;8.1.3 指针的运算 对于指针只能进行赋值运算、间接引用运算、算术运算、两个指针间的减运算和关系运算。 1.赋值运算 指针变量在使用之前必须有确定的指向,通过给指针赋值就可以使之指向确定的数据。 下面例子说明如何给指针赋值,以及应注意的一些问题。 int a = 16, b = 28; //说明整型变量a,b float x = 32.6f, y = 69.1f; //说明浮点型变量x,y int *pa, *pb = b;//说明两个指向int对象的指针变量pa,pb,并使pb指向变量b float *px, *py = NULL;//说明两个指向float对象的指针变量px,py,使py为空指针 px = x; //使指针px指向变量x *pa = b; //非法,左值与右值的类型不同,左值是int型,右值是int*型 pa = pb; //pa和pb都指向同一个变量 pa = x; //非法,pa指向对象的类型只能是int型,而x是float型 pb = 0x3000; //非法,不能用字面常量给指针变量赋值

文档评论(0)

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

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

1亿VIP精品文档

相关文档