网站大量收购独家精品文档,联系QQ:2885784924

4数组与指针.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4数组与指针

第4章 数组和指针 内容: 数组 指针的引入 C风格字符串 多维数组 小结 C++语言提供两种类似于vector和迭代器类型的低级复合类型---数组和指针。与vector类型类似,数组也可以保存某种类型的一组对象;区别在于,数组的长度是固定的。数组一经创建,就不容许添加新的元素。指针则可以像迭代器一样用于遍历和检查数组中的元素。 现代c++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针。设计良好的程序只有在强调速度时才在类实现的内部使用数组和指针。 数组是c++语言中内置数据结构。数组也是一种存储单一数据类型对象的容器,其中每个对象都没有单独的名字,而是通过它在数组中的位置对它进行访问。 4.1数组 1、显式初始化数组元素 在定义数组时,可为其元素提供一组用逗号分隔的初值,这些初值用{}括起来,称为初始化列表: const unsigned array_size = 3; Int ia[array_size] = {0,1,2}; 如果没有显式提供元素初值,则数组会像普通变量一样初始化 2、特殊的字符数组 字符数组还可以用一个字符串字面值进行初始化,要注意的是:字符串字面值包含一个额外的空字符(null)用作结束字符。 使用一组字符字面值初始化字符数组时,一定要记得添加结束字符串的空字符。例如下面的初始化将导致编译时的错误: const char ca3[6]= “Daniel”;//error:Daniel is 7elements 3、不容许数组直接复制和赋值 与vector不同,一个数组不能用另外一个数组初始化,也不能将一个数组赋值给另一个数组 检查数组下标值:必须保证其下标值在正确范围之内,即数组在下标位置对应一个元素。 除了程序员自己注意细节,并彻底测试自己的程序之外,没有别的办法可以防止数组越界。 4.2 指针的引入 vector的遍历可使用下标或迭代器实现,同理,也可以用下标或指针(pointer)来遍历数组。指针是指向某种类型对象的复合数据类型,使用于数组的迭代器:指向数组中的一个元素。在指向数组元素的指针上使用解引用操作符 *(dereference operator),可获得该指针所指对象的值。 4.2.1什么是指针 指针的概念很简单:指针用于指向对象。与迭代器一样,指针提供对其所指对象的间接访问,只是指针结构更通用一些。与迭代器不同的是,指针用于指向单个对象,而迭代器只能用于访问容器内的元素。 具体来说,指针保存的是另一个对象的地址: string s(“hello world”); string *sp = s;//sp holds the address of s 第二条语句定义了一个指向string类型的指针sp,并初始化sp使其指向string类型的对象s。*sp中*操作符表明sp是一个指针变量,s中的符号是取地址符。当此操作符用于一个对象上时,返回的是该对象的存储地址。取地址符只能用于左值,因为只有当变量用作左值时,才能取其地址。 4.2.2 指针的定义和初始化 每个指针都有一个与之关联的数据类型,该数据类型决定了指针所指对象的类型。 1.指针变量的定义 vectorint *pvec; //pvec can point to a vectorint Int *ip1,*ip2; //ip1 and ip2 can point to an int string *pstring; //pstring can point to string double *dp; //dp can point to a double 提示:理解指针声明语句时,请从右向左阅读。 在声明语句中,符号*可以用在指定类型的对象列表的任何位置: double dp,*dp2; //dp2 is pointer;dp is an object:both type double 2.另一种声明指针的风格 在定义指针变量时,可用空格将符号*与其后的标识符分隔开来。下面的写法是合法的: string* ps;//legal but can be misleading 该指针风格容易引起这样的误解:把string*理解为一种数据类型,认为 在同一声明语句中定义的其他变量也是指向string类型对象的指针。然而 string* ps1,ps2;//ps1 is a pointer to string ,ps2 is a string string* ps1,*ps2

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档