




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章指针,1 .2 .3 .本章所述的内容:4 .地址是指针的概念。 指针变量的说明和初始化,指针变量的使用,指针数组的含义和使用。5.1指针和指针变量、5.1.1直接访问和间接访问、程序中描述变量时,c编译器将向存储该变量可能值的存储器分配存储单元格。 变量的类型不同,分配的内存容量也不同。如果一个变量所需的内存字节数大于1,则将其与几个字节的地址相关联。 所谓一个“变量的地址”,是指其占有存储区域中从小到大的第1字节的地址。 例如,理解变量地址和变量类型之间的关系,#include stdio.h main() int x; 浮动y; 查尔斯; x=32; y=55.068; ch=A;
2、 printf (address of x=un,程序的执行结果和内存分配的图像,32,65492,65493,55.068,这取决于变量的类型。 用c语言说出变量的地址,这个变量的类型信息也隐含在内,不能大致视为一个地址。 中的组合图层性质变更选项。 地址作为指针的原因是变量的内存地址被称为指针。 即地址是指针,指针是地址。变量地址的作用、(1)、(2)、变量的地址(指针)是1个值(不是普通意义的值而是无符号的值),因此能够将该值保存保存在某变量中。 用于存储这种地址的变量称为“指针变量”。 由于变量的地址(指针)中也包含该变量的类型信息,所以任意地址不能保存在任何指针变量中。 只有具有相同
3、类型变量的地址才能存储在此指针变量中。 也就是说,指针变量也必须是自己的类型,并且必须与内部存储地址中隐含的类型相匹配。通常用变量名访问存储单元。 从该变量名得到该地址,从该地址直接完成对存储单元的访问的方法称为对存储器的“直接访问”。例如,如果在程序中找到变量y,那么可以得到地址65494。 可以在65494取出其中的内容,在其中保存新的内容。/32,65492,55.068,65494,65499,x,y,ch,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不、32,65492,32,65492,55.068,65494,65499其中,访问进程需要更
4、改为从指针变量ptr中获取地址65500。 取出里面的65494。 这是变量y的地址,不是y的内容。 然后,通过该地址的指示(图中绘制的箭头),在65494中获取y值55.068。 即,此时,从一个地址(65500 )得到另一个地址(65494 ),从该地址访问所需的存储单元。 这种存储单元访问方法被称为对存储器的“间接访问”。内存间接访问的图像,即使有别的描绘方法,表现的意思也是一样的。 只是为了清楚起见,将指针变量ptr向外发出,由箭头指示654-94,并且内容654-94表示指向变量y。 一个语句可以解释相同类型的指针变量。 前面必须有指针变量的标识符“*”。 中的组合图层性质变更选项。
5、 变量说明中的“*”符号表示是指定的指针变量,不是所说明的指针变量名本身的一部分。 c语言将存储单元的地址视为数据类型,即“指针型”数据。 存储指针类型数据的变量称为指针类型变量,简称为“指针变量”。5.1.2指针变量的说明和初始化,说明一个指针变量的格式是:关于指针变量的说明的一些注意事项,(1),(2),变量说明中,指针变量中保存的变量地址的类型。 例如: int *ptr; 表示ptr是指针变量,只能存储整数变量的地址,ptr称为整数指针变量。 指针变量的完全说明形式为: *; 中的组合图层性质变更选项。均遵循一般变量的说明规定。*=; 中的组合图层性质变更选项。 例如,变量说明文: i
6、nt x、*p=说明整数变量x和整数指针变量p,将x的地址分配给指针变量p。 因此,“p指向变量x的指针变量”,即“p指向变量x”,或“p指向x的指针”。 在程序中,记述int x=32、*p=程序,验证保存在指针变量p中的是变量x的地址。 (1)、程序实现、(2)、分析和讨论、#include stdio.h main() int x=32、*p=、变量x的地址为“”,int x、y、s10、*ptr; 在此,p=”表示p指示变量x,*p是x的内容,即32。 也就是说,*p等于x。2 .指针运算符: *、*”是单用运算符,使用格式为:例:例:编写程序,然后进行以下变量说明: int x=32
7、、*p=验证、(1)、程序实现、(2)、分析和讨论、# include stdio.h main () int 、如果指针变量指向某个变量,则使该指针变量作用运算符“*”时,与该指向的变量完全等价,双方的书写方法在程序中通用。*、此运算符的运算对象仅为指定的指针变量或一个地址。 运算结果实现了对该指针变量(或地址)指向的变量的访问,即对指定变量的间接访问。 存储器的初始分配如图(a )所示,各变量的说明为int a、*p1、*p2; 的双曲馀弦值。 依次执行以下语句后,每个内存单元的内容是什么? a=14; p1=,例如,可以举出,65494,x,可以举出,可以举出,可以举出,可以举出,可以举
8、出,可以举出,可以举出,可以举出,可以举出,可以、65494、65494、65494、65512、14、65494、65494、四、65494 打印输出,按照、的顺序,打印输出。 例如、(1)、方法1 :直接调整变量的内容,#include stdio.h main() int x、y、temp; printf (pleaseentertwonumbers : ); 在判定为扫描(DD,x,y,temp,32,15,x,y,temp,32,15,(b) x中的内容大于y时,通过temp交换x和y中的内容,达到x中的值小于y的目的。 (a )是初始状态,图(b )先将x的内容暂时保存在temp中
9、。 图(c )将y的内容送入x中。 图(d )将tp的内容发送给p2,使p2朝向x。 这样,通过调整p1、p2的指向,达到了p1指向小数、p2指向数的目的。 (2)、方法2 :调整指针的方向,不更改变量的内容,#include stdio.h main() int x、y、*p1=、x、y、tp或ap=也可以达到这个目的。 对于5.2.1一维数组的指针变量、5.2指针和数组、数组,数组名称是分配给它的存储的开头地址,每个元素也有自己的地址。 因此,可以用一个指针变量指向数组。 也可以用一个指针变量(称为指向数组的指针变量)指向数组的元素,简称为指向数组的指针。 这被称为“指向数组元素的指针变量
10、”,简称为“指向数组元素的指针”。如果将数组元素的地址分配给指针变量ap,则指向该元素。 例如,基于上述说明,有如果ap=则ap指向第2要素a1这样的句子。 例如、a :ap=a; 或者ap=”。编写程序,通过p运算移动指针p,验证是否能够得到该数组的所有元素的地址。 (1)、程序实现、(2)、分析和讨论、#include stdio.h main() float f5、*p=f; 英特尔; for (j=0; j5; j )对j ) printf (ut,指针p进行运算,并不是简单地加1,而是加上其指示的变量数据类型的长度单位。 用、p运算,可得到数组所有元素的地址。可以用*p(*(p )
11、)访问数组所有元素的内容。 例如: (1)、程序实现、(2)、分析和讨论、intd5=0、1、2、3、4; 编写用di和*p两种方法访问数组元素的程序。 #includestdio.hmain()intd5=0、1、2、3、4。 英特尔、*p; p=d; for (i=0; i5; 打印机(dtdn、di、*p ); 程序的输出结果,0012234,*”的优先顺序相同,遵从从右到左的结合性。 由于耦合性,对p先进行运算。 但是,现在增加了一个后缀式,请按照规定使用p后再做。 即,在完成由“*”规定的运算之后,对p进行。 因此,*p的行为是在检索p当前指数化的组元素的值之后,将p移动到下一个数组
12、元素。 当指针指向一维数组的第一个地址时,c语言提供了访问该数组的第I个元素的四种方法:i i *(i) *(i ),前两个使用数组元素的下标,因此称为“下标法”,后两个使用指针运算符,因此称为“在此,称为“I “I”和“*(i )”是用于表示第I个要素的下标法和指针法。 创建一个描述数组及其指向数组的指针的程序,以验证对数组元素ai的四种等效访问方法。 例如,(1)、程序实现、(2)、分析和讨论、#includestdio.h main() int j、k、b=10、20、30 int *bptr=b; for (j=0; j=3; 打印机(BD=dn,j,bj ) :打印机(n ); fo
13、r (k=0; k=3; (k )打印(* (BD )=dn、k、* (bk ) ) :打印(n ); for (j=0; j=3; (j )打印(bptrd=dn,j,bptrj ) :打印(n ); for (k=0; k=3; (k )打印(* (bptr d )=dn、k、*(bptr k ) ); printf (n );程序的执行结果如图所示,数组名是地址常数,指向数组的指针是变量,所以不能完全同等地使用它们,它们之间有差异。 数组名称不能修改,指针可以更改点。 中的组合图层性质变更选项。 除了数组名之外,还可以校正数组元素的地址,但是不能增量、增量的指针是变量,不仅可以进行加减运算,而且可以校正某个数组元素的地址,还可以进行增量、增量运算指向数组元素的指针引用数组元素,并将数组的第I个元素的地址指派给指针变量,指向该数组的第I个元素。 在这种情况下,可以通过将指针向前或向后移动来获取数组中所有元素的地址,然后通过减去k或将k相加(其中k是正整数)来获取数组中所有元素的地址,或者相对于第I个元素的第k个元素的地址我现在读程序。 运行该程序时,指针变量p如何移动? 最终指数组d中的哪个元素? 例如,您可以选择包括下列内容:包括d20、p=、d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业环境信用管理办法
- 企业培训课时管理办法
- 企业人员晋升管理办法
- 人文社科项目管理办法
- 仓库施工备案管理办法
- 优化完善风险管理办法
- 临时占用道路管理办法
- 产业资金管理办法举措
- 企业用水登记管理办法
- 企业外汇账户管理办法
- YY/T 1623-2018可重复使用医疗器械灭菌过程有效性的试验方法
- GB/T 28055-2011钢质管道带压封堵技术规范
- GB/T 23936-2018工业氟硅酸钠
- GB/T 1874-1995磷矿石和磷精矿中酸不溶物含量的测定重量法
- GB 30980-2014海洋倾倒物质评价规范疏浚物
- GA/T 1393-2017信息安全技术主机安全加固系统安全技术要求
- 尼可地尔临床应用优势课件
- 超星尔雅《诗经》导读检测题答案
- 地源热泵埋管冬夏季换热平衡计算
- 湖北省职称评审专业目录表(工程系列)
- 中考《红星照耀中国》各篇章练习题及答案(1-12)
评论
0/150
提交评论