网站大量收购闲置独家精品文档,联系QQ:2885784924

浙江大学刘加海C语言课件4.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 指针与数组 本章重点 1. 指针变量对一维数组元素的引用方法。 2. 指针在一维数组中的应用。 3. 指针变量对字符串的引用。 4. 数组指针在二维数组中的应用。 5. 指针数组的概念。 6. 多级指针概念与应用。 本章难点 1. 如何用指针变量来表示数组元素及元素的地址。 2. 指针变量在一维数组中的移动。 3. 字符指针变量的赋值方法及运用。 4. 数组指针的理解与应用。 5. 数组指针与指针数组的区别。 6. 对多级指针概念的理解。 4.1 一维数组与指针 在第1章已经学习了指针的概念以及指针的基本运算。指针是一个变量的地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。定义指针的目的是为了通过指针去访问内存单元。在实际使用中,指针变量通常应用于数组,因为数组在内存中是连续存放的,指针应用于数组将会使程序的概念十分清楚、精练、高效。 下面通过例子来说明一维数组与指针的关系。 首先定义一个一维数组及同数据类型的指针变量,然后指针变量指向数组某元素的地址,如: int a[10]; /*定义a为包含10个整型数据的数组*/ int *p; /*定义p为指向整型变量的指针*/ 应当注意,因为数组为int型,所以指针变量也应为指向int型的指针变量。 下面是对指针变量赋值: p=a; 把a[0]元素的地址赋给指针变量p。也就是说,p指向数组a的首地址。在第一章已经学习了一维数组的元素表示与地址表示的方法。 表4.1 一维数组的元素表示法 数组表示 指针表示 a[i] p[i] 或*p *(a+i) *(pi)*p 表4.2 一维数组元素的地址表示法 数组表示 指针表示 a[j] p+j 或 p a+j 注意 如有定义:int a=10,*p; p = a ;p、a 都为地址,而*p ,a a来说,a是成立的,而*a是无意义的,而对指针p来说,*p、*p都是有意义的。 例4.1 如有定义:int x=2,*p=x;*p (B) *x (C)*p (D)*x p再取地址,变量x取地址都是有意义的,指针p取内容即为变量x的值,而变量x不能再取内容,因而(D) 例4.2 如有定义int a[5];i5),不能表示数组元素的是( )。 (A)*(ai) (B)a[5] (C)a[0] (D)a[i]a[i]或*(ai)i的取值为0至4,a[5]超界,所以答案为B。 例4.3 若有以下定义和语句,int a[10],i=i10,则对数组元素地址的正确表示是( )。 (A)a++ (B)(a1) *(a1) (a1)a的第一个元素的地址(从第0个元素开始)。选项C表示数组a的第一个元素的值,所以正确答案为B。 例4.4 编写一程序定义具有10个元素的一维数组,通过数组元素的方法从键盘输入数据,找出比相邻元素大的元素个数(头、尾元素不计在内)。 解析:如数组定义为:int a[10];数组的元素可表示为:*(a+i)、a[i],其元素的地址可表示为:a+i、a[i]。统计比相邻元素大的元素个数(头、尾元素不计在内)时可用语句: for(k=0,i=1;i9;i++) if(a[i]a[i+1]a[i]a[i-1]) k++; 完整的程序代码为: #includestdio.h void main( ) { int a[10],i,k; for(i=0;i10;i++) scanf(“%d”,a+i); for(k=0,i=1;i9;i++) if(a[i]a[i+1]a[i]a[i-1]) k++; printf(k=%d\n,k); } 例4.5 阅读程序,找出程序中的错误。 #includestdio.h void main( ) { int *p,i,a[10]; p=a; for(i=0;i10;i++) *p++=i; for(i=0;i10;i++) printf(a[%d]=%d\n,i,*p++); } 分析:指针p指向数组a的首地址,把循环变i的值赋给p所指的地址上,然后p指向数组的下一个元素,当到第二个循环开始时指针已移出数组,此时输出的内容已是一些随机数据而出错。 把上述程序改写为: #includestdio.h void main( ) { int *p,i,a[10]; p=a; for(i=0;i10;i++) *p++=i; p=a; for(i=0;i10;i++) printf(a[%d]=%d\n,i,*p++); } 例4.6

文档评论(0)

185****7617 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档