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

C语言内涵教程周二强著第9章节指针中.ppt

C语言内涵教程周二强著第9章节指针中.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言内涵教程 周二强 zeq126@126.com 中国铁道出版社 ISBN9787113163815 第9章 指针 9.4 地址可以参与的运算 9.5 指针与数组 9.5.1 指针与一维数组 9.5.2 指针与二维数组 9.5.3 指针与字符串 9.4 地址可以参与的运算 指针变量可以与一个整数做加法或减法运算。 如果一个整型指针变量pi的右值为int型地址 0x0012 ff00,则pi + 1的值是多少呢? 再次强调:做加法运算时变量表现为右值(内容),即使这个表达式位于赋值操作符的左边。通常只有赋值时变量才表现为左值。 例9-10 分析下面程序的输出 p指向了a[0]标识的存储单元,则p+i指向? p指向了a[0]标识的存储单元,则p+i指向? i为0时,p+0指向a[0] i为1时,p+1指向 p所指向的存储单元 相邻的下一个同类型 存储单元,即a[1], p+i指向? a[i], p+i的值为? 故*(p+i)与a[i]可互换使用! 例9-11 设指针变量p的右值为0x0012 ff00,求其定义如下时p+1的右值。 1. char *p; 2. char (*p)[5]; 分析: p+1 指向p所指向的存储单元相邻的下一个同类型存储单元,因此,它的右值与变量p指向存储单元的类型有关,即它是什么样的指针变量相关。 1.指针变量p为字符型指针变量,因此,p+1的右值为字符型地址0x0012ff01。 2. char (*p)[5]; 语句char (*p)[5];中括号操作符与下标操作符的优先级相同,左结合,因此,先解释括号操作符,*p说明变量p为指针变量。定义中的剩余部分char [5]说明了指针变量所指向存储单元的类型,即长度为5的字符型数组, 因此,p + 1的右值为0x0012 ff05,即类型为有5个元素的字符型数组的存储单元的地址,可简记为char [5]型地址0x0012 ff05。 指针变量的减法 指针变量也可以减去一个整数。p - 1的结果为与指针变量p右值同类型的地址,即与指针变量p指向的存储单元相邻的上一个同类型存储单元的地址。 两个同类型的指针变量可以相减,结果为整数,表示两个变量之间相差几个同样的存储单元。 其它运算 对于指针变量p,p = p + 1;同样可简写为p += 1;或++p;、p++;。p = p – 1;与此类似。 两个同类型的指针变量可以进行等于(==)或不等于(!=)比较运算,如果两个指针变量相等,则它们指向同一块存储单元。两个同类型的指针变量也可以进行、、=和=比较运算。 指针变量的运算通常与数组元素相关时才有实际意义。 9.5 指针与数组 方括号[ ]是一种下标操作符,如有数组a,则a[e]的操作过程可理解为*(a+e)。数组名a也参与了运算,它的值是多少呢? C语言规定:数组变量(a)的右值为数组首元素的地址(a[0])。 下标操作符也可用于指针变量,如有指针变量p,则p[e]也等价于*(p+e)。可见,指针与数组有着密切的关系。 9.5.1 指针与一维数组 例9-12 已知int a[3] = {1, 2, 3};如何理解数组a? 设数组变量a在内存中的状态如图所示。 分析表达式 sizeof(a) a = 3 sizeof(a+1) *a+1 *(a+1) 例9-12 已知int a[3] = {1, 2, 3}; int *pi;且pi=a;后。 分析表达式 pi++ *pi++ *++pi pi[2] 例9-13 分析下面的程序 例9-14分析下面的程序 分析下面的程序 例9-15 分析例7-10。 与数组兼容的普通指针类型 如果一个普通的指针变量可以用某数组变量赋值,则称该类型的普通指针变量与此数组类型“兼容”。 C语言规定,形参的类型为数组时,数组类型会转化为与之“兼容”的普通指针类型。 数组与其首元素的地址 获得了数组首元素的地址,就可以使用数组中的元素了。 数组是一组变量,标识了一组地址连续的同类型存储单元,因此,一个数组有时就表现为其首元素的地址 。 9.5.2 指针与二维数组 例9-16 如何理解二维数组? 以二维数组int a[3][2] = {{1, 2}, {21, 22}, {31, 32}}为例,设它的内存状态如图所示。 二维数组变量a a[0]是一个长度为2的一维 整型数组,它的存储单元 含有两个整型元素,因此它的存储单元的类型为int[2],由此可知,变量a存储的内容为int[2]型地址。 数组变量a指向了一个int[2]型存储单元! a,a[0],a[0][0]的关系 分析表达式a, a + 1, a + 2 a是一个地址型的虚拟变量 变量a指向a[0],故a+1指向 与a[0]相邻的下一

文档评论(0)

精品课件 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档