- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章第三讲 指针与二维数组 8.3.5 指针与二维数组 1.二维数组和数组元素的地址 C语言的二维数组由若干个一维数组构成,即二维数组的每一个元素是一个一维数组。例如定义以下二维数组: int a[3][5]={ {l,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} }; 可以这样理解:数组a由三个元素组成:a[0]、a[l]、a[2],而每个元素又是一个一维数组,且都含有5个元素,即: a[0] a[1] a[2] a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] 虚拟 a+1 a+2 图5.9 第8章第三讲 指针与二维数组 在C语言中,二维数组名a同样是二维数组的首地址,其值为二维数组 中第一个元素的地址。a也是二维数组第0行的首地址,a十1是第1行的首 地址,a+2是第2行的首地址。假设此二维数组的首地址为1000,由于每行 有5个整型元素,所以a+l值为1010,a十2值为1020,如图5.10所示。 a[0] a[1] a[2] a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a[0]+0 a[0]+1 a[0]+2 a[0]+3 a[0]+4 a+1 a+2 1000 1002 1004 1006 1008 1010 1012 1014 1016 1018 1020 1022 1024 1026 1028 注意:a[0][0]等价于a[0] a[0]等价于a 则 a[0][0]等价于a 图5.10 第8章第三讲 指针与二维数组 由于a[0]、a[1]、a[2]是一维数组名,它们就是对应数组的首地址。 因此: a[i]+j是第i行第j列元素的地址( a[i][j] ) 由指针运算符“ * ”和下标运算符“[ ]”的运算规则得知: a[0]与*(a+0)等价,a[1]与*(a+1)等价…… a[i]与*(a+i)等价,a[i]+j与*(a+i)+j等价,它们的值都是a[i][j],即元 素a[i][j]的地址。表5.2总结了二维数组元素的地址表示形式,表中假设二 维数组a每行有5个元素,并假设a的首地址为1000。 表示形式 含 义 地 址 a 二维数组名,数组首地址 1000 a+i 第i行的首地址 1000+5*i*sizeof(类型) a[i]+j, *(a+i)+j, a[i][j] 第i行第j列元素的地址 1000+(5*i+j)*sizeof(类型) a[0][0]+5*i+j 第i行第j列元素地址,此处假设a数组每行5个元素 1000+(5*i+j)*sizeof(类型) 表5.2 第8章第三讲 指针与二维数组 注意a与*a数值相同,但意思不同。执行语句printf(”%x,%x”,a,*a); 的结果是相同的 。 因为a是行指针,a+1指向下一行;而*a即为a[0],是数组a第0行第0列 元素的地址a[0] [0],*a+1指向下一个元素a[0][1]。 2.通过地址存取二维数组元素 假设有如右定义: int a[3][5], i, j; 则二维数组a中的任一元素a[i][j],可以用下述表达式之一来等价表示: *(a[i]+j) *(*(a+i)+j) (*(a+i))[j] *(a[0][0]+5*i+j) a[i][j] 等价于 等价于 等价于 等价于 第8章第三讲 指针与二维数组 [例8.8]以下通过一个简单的例子来说明上述等价关系。 main( ) { int i,j,a[ ][5]={1,2,3,4,5,6,7,8,9,10,1l,12,13,14,15}; printf(”%5d,”,*(a[ l ]+4)); /*输出元素a[l][4]*/ printf(”%5d\n”,- -*(*a+3));
文档评论(0)