04_复杂数据与运算——指针.ppt

  1. 1、本文档共75页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数组复习—问题 1)什么情况下使用数组? 2)数组里的元素是顺序存放的吗? 3)一维数组如何定义? 4)一维数组的初始化 5)一维数组元素怎么使用 6)一维数组如何输入输出 7)二维数组的使用 4.2指针 为了操作地址!!! 一点忠告! C/C++可以直接操作内存地址。 指针就是为了地址操作而存在的。 指针是复杂又容易出错的。 在不是必须使用指针的场合,不推荐用指针。 我们学习指针不是为了到处用指针,而是在需要用的时候使用。 我们自己写程序的时候,在确保程序实现功能的前提下,代码是越简单越好,而不是技巧越多,越复杂越好! 本节的学习 本节除了动态内存分配,其余所有程序例题,其实都可以不需要指针。 只所以用指针是为了帮助我们理解指针的用法。 本节的学习,一定要了解一点内存的知识。 内存单元的地址 C++各种基本数据类型的长度(字节) 对例4_5的分析:如何获得变量的地址 intArray是数组名,代表的是数组的起始地址,也就是第一个元素的地址。 intArray[i],用下标法访问数组的元素。 intArray[0]是数组的第一个元素,该元素的地址是intArray[0]。 所以intArray, intArray[0],所存放的地址是一样的。 一旦定义了一个数组,数组名存放的就是数组的起始地址,也就是一个地址类型的数据。 在生存期内,整个数组在内存中的所占用的存储空间是不变的,地址是不变的,所以数组名是一个地址类型的常量。 对一维数组的再探讨 一维数组有个关键问题:下标不可以越界。但是如果越界编译器并不能检查出错误。 从地址的角度来考虑这个问题。 对例4_6的分析 通过本例的输出,可以看出数组元素是顺序存储的。 array[5],其实已经不是array数组中的元素的地址了。 增加语句:array[5]=100; 在编译时不会出现错误信息; 运行后得到的错误信息,是操作系统发出的。 对例4_7的分析 通过本例的输出,可以看出多维数组元素是按行存储的。 二维数组在内存中的存储 占据一片连续存储区 int a[4][3] 4.2.1 结束语 这个部分通过3个例子,展示了数据在内存中如何存放,特别强调了数组的存放。 普通变量:用取地址运算符获得地址。 数组:数组名就是数组的起始地址。 那么,地址取出来做什么?刚学过的3个例子中,地址取出来只是做了输出。 问题1:为什么要使用地址? 问题2:如何使用地址? 问题1:为什么要使用地址? 问题2:如何使用地址? 用于存放地址的变量就是指针类型的变量。 对例4_8的分析 通过本例的,学习 定义指针 给指针赋值 使用指针 空指针 指针初始化 int* P_num=0; P_num=num; 先定义指针,再赋值 int* P_num=num; 定义指针同时初始化 习题 P72:选择题3,4 指针变量的算术运算 指针与整数的加减运算 指针p加上或减去n,其意义是指针当前指向位置的前方或后方第n个数据的地址。 这种运算的结果值取决于指针指向的数据类型。 指针加一,减一运算 指向下一个或前一个数据。 例如:y=*p++ 相当于 y=*(p++) 注意: 指针做算术运算 有意义的场合:访问连续数据序列,例如数组。 其他情况不要用,不仅没意义,还容易带来危险操作。 指针变量的关系运算 关系运算 指向相同类型数据的指针之间可以进行各种关系运算。 指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的。 指针可以和零之间进行等于或不等于的关系运算。例如:p==0或p!=0,判断是否为空指针 赋值运算 向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。 对例4_9的分析 指针可以和整数进行加减运算,运算规则比较特殊。 指针加减运算的结果与指针类型密切相关。 指针加1的效果是使指针指向下一个完整数据的起始地址。 利用指针的这个特性,通过指针的不断增值,依次顺序访问有序的批量数据。 指针的算术运算 一般来讲,指针的算术运算是和数组的使用相联系的,因为只有在使用数组时,才会得到连续分布的可操作内存空间。 常用的比较运算: 如果两个同类型的指针相等,表示这两个指针是指向同一个地址的。 如果一个指针等于0,表示这个指针是空指针。 习题 P71:选择题2 指向数组元素的指针 声明与赋值 例:int a[10], *pa; pa=a[0]; 或 pa=a; 通过指针引用数组元素 经过上述声明及赋值后: *pa就是a[0],*(pa+1)就是a[1],... ,*(pa+i)就是a[i]. a[i], *(pa+i), *(a+i), pa[i]都是等效的。 不能写 a++,因为a是数组首地址是常量。 为什么用指针处理数组 与后面要学习的动

文档评论(0)

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

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

1亿VIP精品文档

相关文档