VC++第八章.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文档。上传文档
查看更多
VC第八章VC第八章

第8章 指针和引用 在程序运行时变量和函数都存放在内存中,通过变量名来访问数据、通过函数名来调用函数都是直接访问方式。 另一种间接访问方式就是用指针。指针的本质是内存地址。 指针往往用于说明函数的形参,使实参能通过指针传递,以提高函数调用的效率。 利用指针能动态地使用内存,以提高内存使用效率。指针是C程序中最常见的类型。 引用是C++扩展的新概念,主要用于函数形参和返回类型。 8.1 指针及指针变量 指针(pointer)的本质是内存地址。指针变量就是专门存储地址的一种变量。通过指针变量所存储的地址来访问数据是一种间接寻址方式。 8.1.1 地址的概念 C++编译器对不同对象或变量按其数据类型分配合适大小的存储空间。 当程序执行时,代码和变量都加载到内存中。计算机内存被分成若干个存储单元,存储单元以字节为单位。 每个存储单元都有一个固定的编号,这个编号就是内存地址。尽管一个变量可能占用多个字节空间,但都通过第一个字节的地址来访问。存放某个变量的第一个字节的地址就是该数据的首地址。 假设在程序中说明了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.赋值运算 指针变量在使用之前必须有确定的指向,通过给指针赋值就可以使之指向确定的数据。 下面例

文档评论(0)

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

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

1亿VIP精品文档

相关文档