新编C语言程序设计教程第9章指针1.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文档。上传文档
查看更多
新编C语言程序设计教程第9章指针1

内存地址 变量用于标识存储单元。计算机中的内存以字节为单位编号。编号多为32位的二进制数,从0号开始,即0x0000 0000、0x0000 0001、……、0xffff ffff。计算机中只用内存编号(又称内存地址)标识内存单元。 如果定义并初始化了一个整型变量如int i = 5;,则计算机中的内存状态可能如图9-1所示。 变量的值 存储单元如宿舍,其地址像宿舍号(如408),其存储的内容如住宿者(如王五),相关变量名如宿舍的雅称(如liaozhai)。 由以上分析可知,变量既标识存储单元的地址又标识其存储的内容,因此变量比如整型变量i也有两个值。整型变量i的一个值是地址0x0012 ff00,另一个值是内容5。 例9-1分析语句i = 5; j = i;中整型变量i的值。 语句i = 5;的操作结果是把5放入变量i所标识的存储单元中,也就是把5的补码存入地址为0x0012 ff00的存储单元中,变量i的值此时实为地址0x0012 ff00。 语句j = i;的操作结果是把变量j所标识的存储单元的状态设置成与变量i的相同,即把变量j的值也设置成5,变量i的值在此处实为内容5。 变量的左值和右值 i = 5; j = i; 位于赋值操作符的左边时,变量的值通常表现为地址,由此称变量的地址为变量的左值;位于赋值操作符的右边时,变量的值通常表现为内容,由此称变量的内容为变量的右值。 变量的左值都为地址,而右值则可能为整数、浮点数、字符等。 指针变量的右值为? 指针变量 指针变量的特殊之处在于其右值也为某存储单元的地址!指针变量的左值和右值均为地址。 如果认为指针变量存储的是指针,则这里的指针显然为某存储单元的地址。 如何理解“存储单元的地址”? 需强调:存储单元的地址只是其首字节地址,仅仅凭地址而不知道类型(存储单元的大小、编码格式等)是无法正确访问存储单元的。 9.1.2 指针变量定义和初始化 指针变量用“*”号定义,但仅用*号标明变量的类型为指针还不行,必须知道指针变量存储的是何种存储单元的地址。因此,指针变量的一般定义形式为: 类型 *标识符 其中,类型规定了与指针变量存储的地址相关的存储单元是何类型,也就是说,一个指针变量只能存储规定类型的存储单元的地址。类型可以是C语言中的整型、浮点型、数组等。 指针变量的定义 如语句int *pi;定义了一个指针变量pi,pi的内容(右值)应为一个int型存储单元的地址; 语句double *pf;定义了一个指针变量pf,pf的右值应为一个double型存储单元的地址。 相关的内存状态 有int i=5, *pi;,且已知变量i的左值为0x0012 ff00。现设指针变量pi的内容为0x0012 ff00,则相关的内存状态可能如图9-2所示。 怎样把变量i的左值(0x0012 ff00)赋给指针变量pi呢? 第一种作法:pi = 0x0012 ff00; 在语句pi = 0x0012 ff00;中,0x0012 ff00仅被看做一个十六进制的整型字面量,指针变量要求用地址为其赋值,两者类型不匹配。 第二种作法:pi = i; 语句pi = i;中变量i表现为右值5,因此语句pi = i;相当于pi = 5;,同样类型不匹配。 强制类型转换 类型不匹配时可以用强制类型转换,正确的作法为:pi = (int *)0x0012 ff00;。 该语句在执行时,会先定义一个临时无名指针变量(假设为int *ptemp;), 然后强制地把整型字面量0x0012 ff00作为地址赋值给临时无名指针变量(此时整型指针变量ptemp的右值为0x0012 ff00), 最后再用临时无名指针变量给指针变量pi赋值(pi = ptemp;),从而使指针变量pi的右值变为0x0012 ff00。 9.2.1 指针操作符 取地址操作符和间接引用操作符*与指针相关,故称为指针操作符。 单目操作符的操作对象是一个变量,操作结果是该变量的地址。使用i就可以获得变量i的左值,即变量i的地址。 有int i = 5,*pi;,用语句pi = i;就可把变量i的地址赋值给指针变量pi,从而使整型指针变量pi指向整型变量i。 间接引用操作符*也是单目操作符,操作对象是一个地址型的量(如指针变量),操作结果为该地址所标识的存储单元的内容。 例9-2 设有如图9-2所示的i和pi,则对于整型变量j,分析语句j = *pi;和语句j = *i;。 改正j = *i;的错误有两种方法 第一种,用取地址操作符获得变量i的地址,把原语句改为j = *(i);。 在语句j = *(i);中,i的操作结果为变量i的左值0x0012 ff00,间接引用操作会获得此存储单元的内容5,故此时j = *(i);相当于j = *pi;或j

文档评论(0)

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

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

1亿VIP精品文档

相关文档