二级c语言第七章指针.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
工程训练中心 徐国海 从二维数组的角度看,a代表二维数组首元素的地址,而现在的首元素不是一 个整型变量,而是一个由4个整型数组成的二维数组。因此a代表的是首行(第0行) 的首地址,a+1代表的是第1行的首地址,a+2代表的是第2行的首地址。 a+1 a+2 23 21 19 17 15 13 11 9 7 5 3 1 a 1000 a+1 1008 a+2 1016 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}; printf(%d,%d\n,a,*a); printf(%d,%d\n,a,*(a+0)); printf(%d,%d\n,a[0],a[0][0]); printf(%d,%d\n,a[1],a+1); printf(%d,%d\n,a[1][0],*(a+1)+0); printf(%d,%d\n,a[2],*(a+2)); printf(%d,%d\n,a[2],a+2); printf(%d,%d\n,a,*a); printf(%d,%d\n,a[1][0],*(*(a+1)+0)); } 例题一 输出二维数组有关的值 #includestdio.h void 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 例题二 用指针变量输出数组元素的值 指向二维数组的指针 为了便于访问二维数组,c语言专门设置了指向由n个元素组成的一维数组的指针,定义格式为: 类型 (*指针名)[常量表达式]; 如: int (*p)[4]; 说明p指向包含4个整型元素的一维数组。P只能指向一维数组。p+1指向下一个一维数组。即指针移动的不是一个元素,而是一行元素。 如:int a[4]; /*a有四个元素,每个都为整型*/ int (*p)[4]; /*p有四个元素,每个都为整型,p所指的对象是有4个整型元素的数组。*/ 因此,这种类型的指针变量与二维数组名的作用相同,若有p=a,则i行j列的元素地址为*(p+i)+j,即 a[i][j]与*(*(p+i)+j)等效 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)

文档评论(0)

wendan118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档