- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 数组与指针 10.1 一维数组首地址和数组元素的地址 一维数组首地址和数组元素的地址 在C语言中,数组占用一串连续的存储单元,如有以下定义: int a[5],*p,i; 数组中每个元素都可以看作一个变量,因此每个数组元素均有一个地址,例如元素a[0]的地址可表示为a[0]。在上面的定义语句中,指针p的基类型为整型,可以指向任意的一个整型存储单元。我们可以使用p=a[0]将指针p指向数据元素a[0]。由于数组元素在内存中是连续的,因此可以通过移动指针p来访问数组中的每个元素。 C语言规定数组名代表数组在内存中的起始地址,即可以使用a表示数组a的首地址。因此也可以使用p=a来让指针p指向数组的起始地址。 需要注意的是:a是一个地址常量,它永远指向a数组的首地址。因此不能对a进行重新赋值,a=i;或a++;这样的赋值语句都是非法的。 二. 通过指针引用一维数组元素 (1)通过指针引用数组元素,如有以下的定义语句: int *p, a[5]; p=a[0]; 指针变量p指向了数组元素a[0],因此可以使用间接访问运算符“*”来引用变量a[0]。如*p=18;是对p指向的存储空间,即a[0]赋值为18,它等价于a[0]=18; 在指针这一章我们学过,可以通过算术运行对指针进行移动。例如p+1表示p所指向存储单元的下一个存储单元,即a[1];p+2指向a[2],p+3指向a[3]……,所以我们可以使用*(p+1)来表示a[1],*(p+2)来表示a[2]……,同样,也可以使用p表示a[0], p+1表示a[1],p+2表示a[2]…… 例10.1 有以下程序: main() { int a[5], *p, i; for(p=a, i=0;i5; i++) scanf(“%d”,p+i); for(p=a; pa+5; p++) printf(“%d”,*p); } (2)通过数组的首地址引用数组元素,如有定义:int a[5]; 由于a表示数组a的首地址,我们可以把a当作一个指针变量。因此*a等价于a[0];*(a+1)等价于a[1]……,同样,a等价于a[0];a+1等价于a[1]…… 例10.2 有以下程序: main() { int a[5], i; for(i=0; i5; i++) scanf(“%d”,a+i); for(i=0;i5;i++) printf(“%d”,*(a+i)); } (3)用带下标的指针变量引用一维数组元素,若有以下定义语句: int *p, a[5]; p=a; 我们可以使用p[0]来表示p指针指向的内存单元,使用p[1]表示p指针指向的内存单元的下一个内存单元。也就是说,可以使用p[0]来表示a[0];p[1]来表示a[1]…… 因此,对数组元素a[i]可以有4种等价的引用方法:①a[i]; ②p[i]; ③*(a+i)④*(p+i)。 对应地,对a[i]地址的引用,也有4种等价的引用方法: ①a[i]; ②p[i]; ③a+i ④p+i。 从上面可以看出,当指针p指向数组a的首地址后,a和p具有相同的引用方法。但是,a和p有着本质的区别:a是数组而p是指针;a不能重新赋值而p可以随意的重新赋值。 例10.3 有以下程序: main() { int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a[3], *q=p+2; printf(“%d\n”,*p+*q); } 程序运行的输出结果是_______。 16 B) 10 C) 8 D) 6 答案:B 例10.4 有以下程序: main() { int i, s=0, t[]={1,2,3,4,5,6,7,8,9}; for(i=0; i9; i+=2) s+=*(t+i); printf(“%d\n”,s); } 程序执行后的输出结果是_______。 45 B)20 C) 25 D)36 答案:C 10.2 二维数组和指针 二维数组的首地址和数组元素的地址 如有以下语句: int a[2][3], *p, i; 数组a如下所示: 任何一个二维数组由若干个一维数组组成 实际上,二维数组a由两个元素组成,分别是a[0]和a[1]。而a[0]和a[1]又分别是两个一维数,
文档评论(0)