第六章 复合数据类型.docVIP

  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文档。上传文档
查看更多
第六章 复合数据类型

第六章 复合数据类型 6.1变量和赋值的进一步讨论 一个变量是由四个要素组成的:一个名字、一个属性、一个关联和一个值。名字指命名变量的标识符;属性指变量可以存放那种类型的值;关联指存放变量的内存位置;值指该内存位置当前时刻存放的数据。 应该认识到这里的值是可能改变的,但任何时候在盒子里总有一个值(我们将无定义的随机值也当做一个特殊的值)。 根据变量在赋值运算中的使用方式,将变量的关联部分称为左值,变量的值部分称为右值。 对于表达式而言,求值结果也存在是否可作为左值使用的问题。一般情况下,表达式的求值结果作为右值使用,但如果一个表达式的求职结果不是void类型,并且指派了一个变量,则该表达式可作为左值。 ((i0)?i:j)=1 .//合法的赋值运算 (i+j) =1 //不合法的赋值运算 6.2指针类型 变量以两种方式被使用:作为一个关联的名字和作为一个值的名字。 对变量的访问也有两种方式:直接访问和间接访问。 在C++中实现对变量的间接访问的方法是:先安排相关变量,专门用于存放变量地址。要间接访问时,先从这些变量获得待访问的变量的地址,然后再按所获得的地址去访问要访问的变量。 指针是存放其他变量地址的变量,所以从效果上看它们指向这些数据。指针使得数据不一定非得与某一特定变量名字相关联,指针可以指向一个没有名字的数据值。 6.2.1指针的声明 int age = 30; //声明一个存放年龄的整数类型变量 让C++编译程序知道有一个新的变量,该变量的名字是标识符age,编译程序会为它分配2个字节的存储空间(假如我们使用的机器上int用两个字节表示)并将30放在这些字节中,并且编译程序知道这些字节中存放的是整数类型数值而不是浮点类型或其他类型数据。 不直接访问age的存储空间地址,而是用age这个名字访问器其存储空间。 ptr常用作pointer的缩写 指针类型是在其他数据类型后加一个类型修饰符“*”,这个类型被称为指针的基类型。如 int * age_ptr; 注意“*”仅用于修饰类型,而不是变量名字的一部分。 一个指针变量占用的存储空间大小取决于机器的内存寻址方式。 指针age_ptr的类型(int*)指明age_ptr仅能指向整数类型的值,而不能指向字符类型、浮点类型或其他类型的值,即age_ptr中存放的地址所指向的存储空间中只可存放整数类型的值。 将“*”与类型名写在一起表明int*是一种复合类型,但要注意 Int * p,q; 声明的却是一个整数类型的指针变量p和一个整数类型变量q 如果把“*” 和指针变量写在一起,则可以连续声明几个指针变量。例如: int *p,*q,*k; 注意(int *)并不能作为一个类型来使用,例如(int *) ptr;并不是一个声明,编译程序会将它理解为类型转换。 6.2.2指针的引用 “”运算符放在操作数前面,操作数必须是一个变量名,表示取出操作数的存储空间地址;”*”运算符也放在操作数前面,操作数必须是一个指针变量,表示取出指针所指向存储空间中保持的值。在一个指针变量前面加上“*”有两种情况:一是声明一个指针变量,此时作为类型修饰符;二是访问指针变量所指向的变量的值,此时作为一元运算符。 空指针是值为0x00的指针变量,许多编译程序提供的函数库中定义了一个空指针名字NULL,其作用相当于0x00,赋值语句: ptr=NULL;相当于ptr=0; int *ptr; 声明指着ptr时没有初始化它,所以ptr中存放的值是不确定的,它随机地指向某一内存区域(这个区域的内容可能很关键)。如果为初始化ptr就使用它: *ptr = 250; 那么存放250的两个字节将可能会写入内存中的关键区域。C++语言在编译与运行时都不报告这种错误,这种错误在程序开发后期才能被发现,并且这种错误的出现具有随机性,因而错误的定位与修改变得十分困难。 6.2.3指针的运算 指针变量的算术运算只能做加、减运算。必须注意指针的算术运算与指针的基类型是密切相关的。例如指针age_ptr的当前值为350606,经过如下运算: age_ptr = age_ptr + 1; age_ptr的当前值不是350607,而是350608。因为指针age_ptr的基类型是int,所以指针age_ptr每次加1就指向下一个整数,所以他存放的地址值是加2而不是加1。 6.2.4按引用调用的参数传递方式 引用类型是在其他数据类型后加上一个类型修饰符“”,该数据类型被称为引用的基类型,例如int是基类型为int的引用类型。注意“”在C++语言中既可作为类型修饰符,也可作为一元运算符(取操作数的地址)或二元运算符(两个操作数进行位与运算) 引用类型的变量并不真正创建一个新的对象,而是作为另一个对

文档评论(0)

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

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

1亿VIP精品文档

相关文档