C语言数组与指针(二).pdfVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言数组与指针(二)

C语⾔ 数组与指针(⼆) 数组与指针的纠葛 在C语⾔中,根据定义,表达式 e 1[e2] 准确地对应于表达式 *((e 1)+(e2)) 。因此,要求 表达式 e 1[e2] 的其中⼀个操作数是 针,另⼀个操作数是整数。且这两个操作数的顺 序可以颠倒。 故: a[4] 等同于 4[a] 等同于 *(a+4)* 编译器把所有的e1[e2]表达式转换成 \ ((e1)+(e2)) 。所以,以下标的形式访问 本质上 与以指针的形式访问没有区别,只是写法上不同罢了 ! 多维数组 ⼆维数组a[i][j ] 编译器总是将⼆维数组看成是⼀个⼀维数组,⽽⼀维数组的每个元素又都是⼀个数 组。 多维数组定义的下标从前到后可以看做是最宏观的维到最微观的维。 例:三维数组 a[i][j ][k] 可理解为 共有 i 个⼤组,每个⼤组⾥有 j 个⼩组,每个⼩组⾥ 有k个元素。 所以: a 表⽰为整个三维数组,其值为 a[0][0][0] a+1 为整个三维数组后⾯的第⼀个位置。 (偏移整个三维数组的长度) a+1 为第⼆个⼤组的⾸位置处 (偏移⼀个⼤组的长度) 【数组名a代表的是数组⾸元素的⾸地址,即:第⼀个⼤组的⾸地址】 a[0] 表⽰为三维数组的 i 个⼤组中的第⼀个⼤组 【可看做⼀个⼆维数组】,其值与 a[0][0][0] 的值相同。 a[0]+1 为第⼆个⼤组的⾸位置处 (偏移⼀个⼤组的长度) a[0]+1 为第⼀个⼤组中第⼆个⼩组的⾸位置处 (a[0]可看做是⼀个⼆维数组名,故其 代表的是第⼀个⼩组的⾸地址) (偏移⼀个⼩组的长度) a[0][0] 表⽰为第⼀个⼤组中的第⼀个⼩组 【可看做⼀个⼀维数组】,其值与 a[0][0] [0] 的值相同。 a[0][0]+1 为第⼀个⼤组中第⼆个⼩组的⾸位置处 (偏移⼀个⼩组的长度) a[0][0]+1 为第⼀个⼤组中第⼀个⼩组的第⼆个元素位置处 (偏移⼀个元素的长度) a[0][0][0] 表⽰为第⼀个⼤组中的第⼀个⼩组中的第⼀个元素。其值为a[0][0][0] , a[0][0][0]+ 1为⾸元素值加1。 (因为a[0][0][0]为元素值⽽不是地址) 数组的数组名 (即:⼆维数组名)退化为数组的(常量) 针,⽽不是 针的 针。同 理, n 维数组名退化为 n-1 维数组的(常量) 针。 【总结:指针代表的是谁的⾸地址 就以谁的⻓度为偏移单位。】 【规律:与定义⽐较,缺少⼏对⽅括号,就是⼏维数组的数组名,如上例:a缺少3对 ⽅括号,即为3维数组的数组名 (代表的是2维数组的地址);a[0]缺少2对⽅括号,即 为2维数组的数组名 (代表的是1维数组的地址);a[0][0]缺少1对⽅括号,即为1维数 组的数组名 (代表的是数组元素的地址)】 【数组名与整数相加,⾸先要转换成数组的⾸元素地址与整数相加,⽽⾸元素的存储 ⼤⼩就是相加的单位】 对多维数组的解析 我们可以⽤上⾯那种从前到后的解析⽅式来思考, a :就表⽰整个多维数组。 a[m] :就表⽰第m+ 1⼤组(⼤组即数组最⼤的维) , a[m][n] :就表⽰第m+ 1⼤组中的第n+ 1⼩组。(⼩组即次⼤的维) , 以此类推,即多维数组的解析是层层细化的。 指针数组与数组指针 指针数组:⾸先它是⼀个数组。数组的元素都是 针。它是“存储 针的数组”的简 称。 数组指针:⾸先它是⼀个 针。它 向⼀个数组。它是“ 向数组的 针”的简称。 例: int p 1[10]; //它是 针数组。 (因为[]的优先级⽐*⾼,p 1先与[]结合,构成⼀个数组的 定义) int (*p2)[10] ; //它是数组 针。 (括号的优先级较⾼,*与p2构成⼀个 针的定义) 它 向⼀个包含10个int型数据的数组。 int (\p)[10][5] ; //则p 向⼀个int型的⼆维数组a[10][5] 。 【规律:数组 针,把定义中括号内的 针看成是⼀个普通的字母,则其表⽰的就是 数组 针所 的对象类型】 int a[5][5] ; int (*p)[4] ; p=a ; 问:p [4][2]-a[4][2]的值为多少? 设⼆维数组的⾸地址为0 ,则a[4][2]为第5组的第3个位置,因为int a[5][5];即有5组,每 组有5个元素。故:a[4][2]是(4*5+2)* izeof(int) 。 int (*p)[4] ; 针

文档评论(0)

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

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

1亿VIP精品文档

相关文档