- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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] ; 针
您可能关注的文档
- BScFinance&VentureManagement(一).ppt
- BuildingaNewVentureTeamandPlanningfortheNextGeneration(一).ppt
- BUMO732NewVentureCreation(一).doc
- BusinessVenture1(七).doc
- BusinessVenture1(三).doc
- BUSINESSVENTUREVALUATION(一).ppt
- BusinessVenture(一).ppt
- BVI-TheLeadingOffshoreJurisdictionforJointVentureCompanies(一).pdf
- B端项目调研提纲的设计与思考.doc
- b演習(言語処理系演習)第一回-home-tauralaboratory.ppt
文档评论(0)