- 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文档。上传文档
二维数组的指针表示方法1.二维数组元素的地址2.二维数组中的行地址与列地址(1)行地址主要形式有两种:a+i、a[i](2)列地址主要形式有三种:*(a+i)+j、a[i]+j、a[i][j](3)区别9.6二维数组的指针表示方法
9.6.1二维数组的地址
一个二维数组可以认为由若干个一维数组所组成。
9.3.2二维数组中的行地址与列地址
floata[3][5];
图中的a或a+0指向a[0]、a+1指向a[1]、a+2指向a[2],也可以表示为:
a==a+0==a[0];┊┊a[0]==a[0][0]==*(a+0)==*a;┊┊→1000
a+1==a[1];┊┊a[1]==a[1][0]==*(a+1);┊┊→1020
a+2==a[2];┊┊a[2]==a[2][0]==*(a+2);┊┊→1040
从图中可以看到有二个方向的控制:①a、a+i或a[i]控制的是行;行地址主要形式有两种:a+i、a[i]。当i=0,a+i等效为:a②*(a+i)+j或a[i]+j控制的是列,即列控制。列地址主要形式有三种:*(a+i)+j、a[i]+j、a[i][j]。当i=j=0,*(a+i)+j等效为:*a,a[i]+j等效为:a[0]对于二维数组a[3][5],它有3行,每一行都有其起始地址。C语言规定,以a[0],a[1],a[2]分别代表第0行、第1行、第2行的起始地址。注意,a[0],a[1],a[2]并不是指数组中的一个元素的地址,而是数组中一行的首地址。如同一维数组的数组名就是数组的起始地址一样,a[0]可以看成是一个一维数组名,这个数组名就是0行中所有列元素的首地址,即a[0]的值等于a[0][0]。下面参照下图,将二维数组a与一维数组b作一对比。*前面已经提到,一个二维数组可以认为是由若干个一维数组所组成。如果定义了一个二维实型数组floata[3][5],则数组每行占5?4=20个字节。假设第0行从地址1000开始,则第1行从1020开始,第2行从1040开始,也就是说对应于a的值是1000,a+1的值为1020,a+2的值为1040。千万不要以为a+1是加4个字节,因为现在a是二维数组,对a来说,它的每一个“元素”是一行而不是一个基本数据元素。从一维数组的介绍中知道,在程序中如果用下标法表示一个元素,如b[i],实际上是把它转换成地址然后访问相应单元的(即b[i]转换成*(b+i)),也就是说b[i]与*(b+i)是完全等价的。图中的a或a+0指向a[0]、a+1指向a[1]、a+2指向a[2],也可以表示为:*从指针加上或减去一个整数后的移动方向来分析,a,a+1,a+2,a[0],a[1]是行地址,它面对的对象是行,因此a+1中的1代表的是一行的长度(20个字节)。而对于表达式*a,*(a+0),a[0],则是指列地址,它指向某一列的元素。因此a[0]+1,*a+1,*(a+0)+1中的1代表的是1个基本数据元素的字节数,即a[0]+1的值是1000+4=1004,代表0行1列元素的地址。a[1]和a[1]的值虽然相同(都是1020),但属性不同,a[1]代表的是行地址1020,而a[1]代表的是列地址1020,如图9-7所示。从图9-7可以看到有二个方向的控制:①a、a+i或a[i]控制的是行,或者说它们是行控制。②*(a+i)+j或a[i]+j控制的是列,即列控制。③虽然a+1和a[1]的值均是1020,但含义(属性)是不一样的。a+1指向a[1],是向纵向移动;a[1]指向a[1][0],是向横向移动。*对于二维数组a[3][5],它有3行,每一行都有其起始地址。C语言规定,以a[0],a[1],a[2]分别代表第0行、第1行、第2行的起始地址。注意,a[0],a[1],a[2]并不是指数组中的一个元素的地址,而是数组中一行的首地址。如同一维数组的数组名就是数组的起始地址一样,a[0]可以看成是一个一维数组名,这个数组名就是0行中所有列元素的首地址,即a[0]的值等于a[0][0]。下面参照下图,将二维数组a与一维数组b作一对比。*前面已经提到,一个二维数组可以认为是由若干个一维数组所组成。如果定义了一个二维实型数组floata[3][5],则数组每行占5?4=20个字节。假设第0行从地址1000开始,则第1行从1020开始,第2行从1040开始,也就是说对应于a的值
您可能关注的文档
- 《职业发展与就业指导》课件——10模拟群体面试.pptx
- 《职业发展与就业指导》课件——16.职场进阶:职场人际网络的构建与优化.pptx
- 《职业发展与就业指导》课件——第八章面试礼仪.pptx
- 《职业发展与就业指导》课件——第二章 认识自我之性格探索.pptx
- 《职业发展与就业指导》课件——第九章 面试常见问题及回答技巧.pptx
- 《职业发展与就业指导》课件——第六章本专业就业形势分析.pptx
- 《职业发展与就业指导》课件——第七章 如何制作简历.pptx
- 《职业发展与就业指导》课件——第三章 自我认知之价值观与兴趣探索.pptx
- 《职业发展与就业指导》课件——第十二章-应届生毕业流程及其他就业去向.pptx
- 《职业发展与就业指导》课件——第十四章—社保相关知识.pptx
文档评论(0)