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

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

ID:42909540

大小:242.51 KB

页数:25页

时间:2019-09-22

浙江大学刘加海C语言课件4_第1页
浙江大学刘加海C语言课件4_第2页
浙江大学刘加海C语言课件4_第3页
浙江大学刘加海C语言课件4_第4页
浙江大学刘加海C语言课件4_第5页
资源描述:

《浙江大学刘加海C语言课件4》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、139第4章指针与数组第4章指针与数组u本章重点1.指针变量对一维数组元素的引用方法。2.指针在一维数组中的应用。3.指针变量对字符串的引用。4.数组指针在二维数组中的应用。5.指针数组的概念。6.多级指针概念与应用。u本章难点1.如何用指针变量来表示数组元素及元素的地址。2.指针变量在一维数组中的移动。3.字符指针变量的赋值方法及运用。4.数组指针的理解与应用。5.数组指针与指针数组的区别。6.对多级指针概念的理解。4.1一维数组与指针在第1章已经学习了指针的概念以及指针的基本运算。指针是一个变量的地址,是一个常量。而一个指针变量却可以被赋予不同的

2、指针值,是变量。定义指针的目的是为了通过指针去访问内存单元。在实际使用中,指针变量通常应用于数组,因为数组在内存中是连续存放的,指针应用于数组将会使程序的概念十分清楚、精练、高效。下面通过例子来说明一维数组与指针的关系。首先定义一个一维数组及同数据类型的指针变量,然后指针变量指向数组某元素的地址,如:inta[10];/*定义a为包含10个整型数据的数组*/int*p;/*定义p为指向整型变量的指针*/应当注意,因为数组为int型,所以指针变量也应为指向int型的指针变量。下面是对指针变量赋值:p=a;139第4章指针与数组把a[0]元素的地址赋给指

3、针变量p。也就是说,p指向数组a的首地址。在第一章已经学习了一维数组的元素表示与地址表示的方法。表4.1一维数组的元素表示法数组表示指针表示a[i]p[i]或*p*(a+i)*(p+i)或*p表4.2一维数组元素的地址表示法数组表示指针表示&a[j]p+j或pa+j注意如有定义:inta=10,*p;p=&a;p、&a都为地址,而*p,a为内容。对a来说,&a是成立的,而&*a是无意义的,而对指针p来说,&*p、*&p都是有意义的。例4.1如有定义:intx=2,*p=&x;以下哪些表达式的含义是不正确的。(A)*&p(B)*&x(C)&*p(D)&

4、*x解析:指针p再取地址,变量x取地址都是有意义的,指针p取内容即为变量x的值,而变量x不能再取内容,因而(D)错。例4.2如有定义inta[5];(其中:0<=i<5),不能表示数组元素的是()。(A)*(a+i)(B)a[5](C)a[0](D)a[i]解析:可以用a[i]或*(a+i)表示一维数组元素,其中i的取值为0至4,而a[5]超界,所以答案为B。例4.3若有以下定义和语句,inta[10],i;且0<=i<10,则对数组元素地址的正确表示是()。(A)a++(B)(a+1)(C)*(a+1)解析:对于选项A,由于a代表数组a的首地址,它

5、的值在程序运行期间是不能被改变的,即它应该是常量,因此a++将无法实现。选项B中的(a+1)表示数组a的第一个元素的地址(从第0个元素开始)。选项C表示数组a的第一个元素的值,所以正确答案为B。例4.4编写一程序定义具有10个元素的一维数组,通过数组元素的方法从键盘输入数据,找出比相邻元素大的元素个数(头、尾元素不计在内)。解析:如数组定义为:inta[10];数组的元素可表示为:*(a+i)、a[i],其元素的地址可表示为:a+i、&a[i]。统计比相邻元素大的元素个数(头、尾元素不计在内)时可用语句:for(k=0,i=1;i<9;i++)if(

6、a[i]>a[i+1]&&a[i]>a[i-1])139第4章指针与数组k++;完整的程序代码为:#includevoidmain(){inta[10],i,k;for(i=0;i<10;i++)scanf(“%d”,a+i);for(k=0,i=1;i<9;i++)if(a[i]>a[i+1]&&a[i]>a[i-1])k++;printf("k=%d",k);}例4.5阅读程序,找出程序中的错误。#includevoidmain(){int*p,i,a[10];p=a;for(i=0;i<10;i++)*p

7、++=i;for(i=0;i<10;i++)printf("a[%d]=%d",i,*p++);}分析:指针p指向数组a的首地址,把循环变i的值赋给p所指的地址上,然后p指向数组的下一个元素,当到第二个循环开始时指针已移出数组,此时输出的内容已是一些随机数据而出错。把上述程序改写为:#includevoidmain(){int*p,i,a[10];p=a;for(i=0;i<10;i++)*p++=i;p=a;for(i=0;i<10;i++)printf("a[%d]=%d",i,*p++);139第4章指针与数组}例4.

8、6将数组a中的n个整数按相反顺序存放。解析:将a[0]与a[n-1]对换,再a[1]与a[n-2]对换…,直

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。