- 1、本文档共60页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[IT认证]Charpter 7 指针
用指针变量可以指向一维数组中的元素,当然也可以指向二维数组中的元素。 二维数组元素的地址: int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 23 21 19 17 15 13 11 9 7 5 3 1 a[2] a[1] a[0] a 二维数组可以看成数组名分别为a[0]、a[1]、a[2]的一维数组。 §7.2.2 指针与二维数组 从二维数组的角度看,a代表二维数组首元素的地址,而现在的首元素不是一个整型变量,而是一个由4个整型数组成的一维数组。因此a代表的是首行(第0行)的首地址,a+1代表的是第1行的首地址,a+2代表的是第2行的首地址。 23 21 19 17 15 13 11 9 7 5 3 1 a 1000 a+1 1008 a+2 1016 a+1 a+2 23 21 19 17 15 13 11 9 7 5 3 1 a[2] a[1] a[0] a a[0]、a[1]、a[2]是一维数组,而数组名表示数组首元素的地址,因此 a[0]代表一维数组a[0]中第0列元素的地址(a[0][0]), a[1]?a[1][0], a[2]?a[2][0]。 那么列指针如何表示? a[2] a[1] a[0] 23 1022 21 1020 19 1018 17 1016 15 1014 13 1012 11 1010 9 1008 7 1006 5 1004 3 1002 1 1000 a[0] a[0]+1 a[0]+2 a[0]+3 a a+1 a+2 a[0]+0、a[0]+1、a[0]+2、a[0]+3分别是a[0][0]、a[0][1]、 a[0][2]、 a[0][3]元素的地址, a[0]和*(a+0)等价,a[1]和*(a+1)等价,a[i]和*(a+i)等价。因此a[0]+1和*(a+0)+1的值都是a[0][1], a[1]+1和*(a+1)+1的值都是a[1][1] 不要把*(a+1)+1写成*(a+1+1) 得到了数组元素的地址,如想得到其值,在其地址前加一个“*”就可得到数组元素的值。 如a[0]+1和*(a+0)+1都是a[0][1]的地址,则*(a[0]+1)和*(*(a+0)+1)是a[0][1]的值。*(a[i]+j)和*(*(a+i)+j)是a[i][j]的值。 切记:*(a+i)和a[i]等价 main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p,i,j; for(i=0;i3;i++) { for(j=0;j4;j++) printf(%4d,a[i][j]); printf(\n); } for(p=a[0];pa[0]+12;p++) { printf(%4d,*p); } printf(\n); } 23 21 19 17 15 13 11 9 7 5 3 1 a 1000 a+1 1008 a+2 1016 p 例1.用指针变量输出数组元素的值 int a[3][3]={1,2,3,4,5,6,7,8,9},(*p)[3]; int i=1,j=2; p=a; printf(“%d”,*(*(p+i)+j)); 例2. 用指针变量访问二维数组 例3.用指针变量求出二维数组中的最大值。 main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},i,j,(*p)[4]; int max; p=a; max=**p; for(i=0;i3;i++) for(j=0;j4;j++) if (*(*(p+i)+j)max) { max=p[i][j]; } printf(“%d”,max); } ㈠ 字符串的表示形式 ⒈ 用字符数组存放一个字符串,然后输出该字符串。 main() { char c[]=“I have a book!”; printf(“%s”,c); } c是数组名,它代表数组元素的首地址。 c?c[0]、c+1?c[1]、c+i?c[i] *(c+3)是c[3] I h a v e a b o o k ! \0 c c[0] c[13] c[12] c[11] c[10] c[9] c[8] c[7] c[6] c[5] c[4] c[3] c[2] c[1] c[14] §7.4 字符串与指针 ⒉ 用字符指针
文档评论(0)