c++ primer 04.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文档。上传文档
查看更多
cprimer04

数组和指针 目录 4.1 数组 96 4.2 指针的引入 100 4.3 C风格字符串 113 4.4 多维数组 122 小结 124 术语 125 C++语言提供了两种类似于vector和迭代器类型的低级复合类型——数组和指针。与vector类型相似,数组也可以保存某种类型的一组对象;而它们的区别在于,数组的长度是固定的。数组一经创建,就不允许添加新的元素。指针则可以像迭代器一样用于遍历和检查数组中的元素。 现代C++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针。设计良好的程序只有在强调速度时才在类实现的内部使用数组和指针。 数组是C++语言中类似于标准库vector类型的内置数据结构。与vector类似,数组也是一种存储单一数据类型对象的容器,其中每个对象都没有单独的名字,而是通过它在数组中的位置对它进行访问。 与vector类型相比,数组的显著缺陷在于:数组的长度是固定的,而且程序员无法知道一个给定数组的长度。数组没有获取其容量大小的size操作,也不提供push_back操作在其中自动添加元素。如果需要更改数组的长度,程序员只能创建一个更大的新数组,然后把原数组的所有元素复制到新数组空间中去。 与使用标准vector类型的程序相比,依赖于内置数组的程序更容易出错而且难于调试。 在出现标准库之前,C++程序大量使用数组保存一组对象。而现代的C++程序则更多地使用vector来取代数组,数组被严格限制于程序内部使用,只有当性能测试表明使用vector无法达到必要的速度要求时,才使用数组。然而,在将来一段时间之内,原来依赖于数组的程序仍大量存在,因此,C++程序员还是必须掌握数组的使用方法。 4.1 数组 数组是由类型名、标识符和维数组成的复合数据类型(2.5节),类型名规定了存放在数组中的元素的类型,而维数则指定数组中包含的元素个数。 数组定义中的类型名可以是内置数据类型或类类型;除引用之外,数组元素的类型还可以是任意的复合类型。没有所有元素都是引用的数组。 4.1.1 数组的定义和初始化 数组的维数必须用值大于等于1的常量表达式定义(2.7节)。此常量表达式只能包含整型字面值常量、枚举常量(2.7节)或者用常量表达式初始化的整型const对象。非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。 数组的维数必须在一对方括号[ ]内指定: // both buf_size and max_files are const const unsigned buf_size = 512, max_files = 20; int staff_size = 27; // nonconst const unsigned sz = get_size(); // const value not known until run time char input_buffer[buf_size]; // ok: const variable string fileTable[max_files + 1]; // ok: constant expression double salaries[staff_size]; // error: non const variable int test_scores[get_size()]; // error: non const expression int vals[sz]; // error: size not known until run time 虽然staff_size是用字面值常量进行初始化,但staff_size本身是一个非const对象,只有在运行时才能获得它的值,因此,使用该变量来定义数组维数是非法的。而对于sz,尽管它是一个const对象,但它的值要到运行时调用get_size函数后才知道,因此,它也不能用于定义数组维数。另一方面,由于max_files是const变量,因此表达式 max_files+1 是常量表达式,编译时即可计算出该表达式的值为21。 1. 显式初始化数组元素 在定义数组时,可为其元素提供一组用逗号分隔的初值,这些初值用花括号{}括起来,称为初始化列表: const unsigned array_size = 3; int ia[array_size] = {0, 1, 2}; 如果没有显式提供元素初值,则数组元素会像普通变量一样初始化(2.3.4节): 在

文档评论(0)

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

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

1亿VIP精品文档

相关文档