- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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; //非法,不能用字面常量给指针变量赋值
您可能关注的文档
最近下载
- 八年级语文上册新教材解读课件(统编版2024).pptx
- 医学成像技术原理全套完整教学课件.pptx
- 幼儿园防恐防暴演练总结(32篇).docx VIP
- 2024年秋新改版教科版六年级上册科学全册教案教学设计(新课标版).docx VIP
- ktv酒水供销合同范本.docx VIP
- 第3课+追求人生理想+第一框+第3目【中职专用】2024-2025学年中职思想政治《哲学与人生》(高教版2023基础模块).pptx VIP
- 第9讲 《反兴奋剂条例》.ppt VIP
- 无人驾驶技术在矿用电机车的应用.docx VIP
- 2025年人教版七年级上册《劳动与技术》教案全册.pdf VIP
- (高清版)B-T 19889.7-2022 声学 建筑和建筑构件隔声测量 第7部分:撞击声隔声的现场测量.pdf VIP
文档评论(0)