C语言程序设计 作者 谭雪松 卢秋根 第8章.pptVIP

C语言程序设计 作者 谭雪松 卢秋根 第8章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.4 指针变量作函数参数 指针变量不仅可以指向基本类型的变量,也可以指向数组中的元素,在讲述相关内容之前,先回顾一下有关数组的定义及其概念。 1.数组与指针的关系 数组实质上是一组变量的有序集合,具有以下特点。 (1)同一数组中的每个元素的数据类型相同。 (2)数组在内存中占有一段连续的存储空间。 (3)数组下标是从0开始的自然数。 (4)数组名代表数组的首地址,也就是第1个数组元素的地址。 因此,只要把数组的首地址或某一元素的地址放到指针变量中,就在数组和指针之间建立起了联系,即可实现对数组元素的访问。 2.注意事项 在使用指针访问数组时,必须注意以下问题。 数组的数据类型应和指针变量的数据类型一致,否则将出现语法错误。 语句“p=a;”的作用是把数组a的首地址赋给指针变量p,而不是把数组a的各个元素的值赋给p,a不代表整个数组,而是代表该数组的首地址。因此,以下几种形式的语句是和语句“p=a;”是等效的: p=a+0; 或者:p=a[0]; 当然,如果要使指针变量p指向数组中的第3个元素可用以下的几种语句:p=a+2; 或者:p=a[2]; 其余类推。 3.使用指针访问所指向数组中的元素 C语言规定:如果指针变量p已经指向数组中的1个元素,则可以通过改变指针的指向来实现对数组中其他元素的访问。 (1)指针的加减运算 如果用户想要控制指针变量指向数组中的其他元素,可以使用指针变量的加减运算,它有如下两种基本形式(其中p代表指针变量,i是1个自然数)。 · p+i(p-i):获得指针当前指向位置之后(前)i个元素的地址,以实现对该元素的访问,注意此时指针的指向并未改变。 · p++(p--):将指针从当前指向位置后移(前移)1个元素的位置,注意此时指针的指向已经发生改变。 (2)使用指针访问数组元素 当指针指向某一数组元素后,通过取内容运算“*”即可获得该指针所指向的数组元素的值。通常,“*(p+i)”或“*(a+i)”是“p+i”或“a+i”所指向的元素的值,即a[i]。 例如,“*(p+5)”或“*(a+5)”就是a[5]。实际上,在编译时,对于“*(a+i)”的处理就是按数组首地址加相对位移量得到要找的元素的地址,然后找出该单元中的内容。假设数组a的首地址为1006,数组为整型,则a[7]单元的地址为1006+7*2 =1020。 (3)指针数组的指针变量也可以带下表 例如对于以下程序段: int p[10],*x; x=p; 则x[i]也是正确的,它与p[i]是等价的。 (4)使用指针处理字符串 在第7章数组中,讲过可以对一个数组赋字符串,其形式如下: char string[]= I Love China !; 可以对指针做同样的操作,其形式如下: char *string=I Love China !; 这两种形式是等效的,系统都默认数组或指针变量是存放字符串的首地址,它们的存储形式也是相同的,只不过是一个实质,两种表述而已。 习题 一、选择题 1.执行以下程序段后,m的值为_____。 int a[2][3]={{1,2,3},{4,5,6}}; int m,*p; p=a[0][0]; m=(*p)*(*(p+2))*(*(p+4)); A.15 B.14 C.13 D.12 习题 2.以下程序的输出结果为_____。 void fun(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; } void main() { int a,b,c,d; a=30;b=50; fun(a,b,c,d); printf(%d,%d\n,c,d); } A.50,30 B.30,50 C.80,-20 D.80,20 3.函数调用时,若用数组名作实参,则传递给形参的是_____。 A.数组元素的个数 B.数组的起始地址 C.数组第一个元素的值 D.数组全部元素的值 4.若a是一维数组名,p是指针变量,是下列语句中非法的是_____。 A.p=a; B.p++ C.a++ D.p=a[0] 5.若有以下定义: int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的是_____。 A.p+=2;*(p++); B.p+=2;*++p; C.p+=3;*p++; D.p+=2;++*p; 6.设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是_____。 A.k=*p1+*p2; B.p2=k; C.p1=p2; D.k=*p1*(*p2); 7.设有如下定义 int arr[]={6,7,8,9,10}; int *ptr=arr; printf(%d,%d,*ptr,*(ptr+2));

文档评论(0)

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

1亿VIP精品文档

相关文档