《C程序设计教案312课时——通过指针引用数组.docx》由会员分享,可在线阅读,更多相关《C程序设计教案312课时——通过指针引用数组.docx(14页珍藏版)》请在第一文库网上搜索。
1、教案序号031周次授课形式新授授课章节名称通过指针引用数组教学目的通过指针引用数组教学重点通过指针引用数组教学难点通过指针引用数组使用教具机房课外作业课后体会授课主要内容 8.3.1数组元素的指针 一个变量有地址,一个数组包含若干元素,每个数组元素都有相应的地址 指针变量可以指向数组元素(把某一元素的地址放到一个指针变量中) 所谓数组元素的指针就是数组元索的地址 可以用一个指针变量指向一个数组元素inta10=1,3,5,7,9,11,13,15,17,19);int*p;P=&a0; 8.3.2在引用数组元素时指针的运算在指针指向数组元索时,允许以下运算: 加一个整数(用+或+=),如p+1
2、 减一个整数(用-或-=),如PT 自加运算,如p+,+P 自减运算,如P,一P 两个指针相减,如p1-p2(只有P1和P2都指向同一数组中的元素时才有意义)(1)如果指针变量P已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,P-I指向同一数组中的上一个元素。f1oata10,*p=a;假设a0的地址为2000,则 P的值为2000 p+1的值为2004 P-I的值为1996(2)如果P的初值为&a0,则p+i和a+i就是数组元素ai的地址,或者说,它们指向a数组序号为i的元素(3)*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即ai。(4)如果指针P1和p2都指向同
3、一数组p2-p1的值是4不能p1+p28.3.3通过指针引用数组元素引用一个数组元素,可用下面两种方法:(1)下标法,如ai形式(2)指针法,如*(a+i)或*(p+i)其中a是数组名,p是指向数组元素的指针变量,其初值p=a8.3.3通过指针引用数组元素例8.6有一个整型数组a,有10个元素,要求输出数组中的全部元素。解题思路:引用数组中各元索的值有3种方法:(1)下标法;(2)通过数组名计算数组元索地址,找出元索的值;(3)用指针变量指向数组元素分别写出程序,以资比较分析。(1)下标法。#inc1udeintmain()inta10;inti;printf(enter10integernu
4、mbers:n*);for(i=0;i10;i+)SCanf(%d”,ftai);for(i=0;i10;i+)printf(w,ai);printf(%r);return0;)(2)通过数组名计算数组元素地址,找出元素的值#inc1udeintmain()inta10;inti;printf(enter10integernumbers:n*);for(i=0;i10;i+)scanf(*%d*,Aai);for(i=0i10u)printf(a%dn,(a+i);printf(*n*);return0;)(3)用指针变量指向数组元素#inc1udeintmain()inta10;int*p,
5、i;printf(enter10integernumbers:n*);for(i=0;i10;i+)scanf%d*,Aai);for(p=a;p3种方法的比较:第(1)和第(2)种方法执行效率相同C编译系统是将ai转换为*(a+i)处理的,即先计算元素地址。因此用第(1)和第(2)种方法找数组元素费时较多。3种方法的比较:第(3)种方法比第(1)、第(2)种方法快用指针变量直接指向元素,不必每次都重新计算地址,像P+这样的自加操作是比较快的这种有规律地改变地址值(p+)能大大提高执行效率 3种方法的比较:用下标法比较直观,能直接知道是第几个元素。用地址法或指针变量的方法不直观,难以很快地判断
6、出当前处理的是哪一个元素。例8.7通过指针变量输出整型数组a的10个元素。A解题思路:用指针变量P指向数组元索,通过改变指针变量的值,使P先后指向a0到a9各元素。#inc1udeintmain()int*p,i,a10;P=a;printf(enter10integernumbers:n*);for(i=0;i10;i+)SCanf(%d”,p+);for(i=0u 8.3.4用数组名作函数参数 用数组名作函数参数时,因为实参数组名代表该数组首元素的地址,形参应该是一个指针变量 C编译都是将形参数组名作为指针变量来处理的intmain()voidfun(intarr,intn;intarra
7、y10;:Bfun(array,10);return0;)voidfun(intarr,intn):intmain()voidfun(intarr,intn;intarray10;fun(array,10);return0;)voidfun(int*arr,intn) 实参数组名是指针常量,但形参数组名是按指针变量处理 在函数调用进行虚实结合后,它的值就是实参数组首元素的地址 在函数执行期间,形参数组可以再被赋值voidfun(arr,intn)printf(w%dn,*arr);arr=arr+3;Printf(%dn,*arr);例8.8将数组a中n个整数按相反顺序存放解题思路:将a0与a
8、n-1对换,将a4与a5对换。例8.8将数组a中n个整数按相反顺序存放解题思路:将a0与an-1对换,将a4与a5对换。例8.8将数组a中n个整数按相反顺序存放解题思路:将a0与an-1对换,将a4与a5对换。例8.8将数组a中n个整数按相反顺序存放解题思路:将a0与an-1对换,将a4与a5对换。例8.8将数组a中n个整数按相反顺序存放解题思路:将a0与an-1对换,将a4与a5对换。inc1udeintmain()voidinv(intx,intn);inti,a10=3,7,9,11,0,6,7,5,4,2;for(i=0;i10;i+)printf(“dw,ai);printf(n);
9、inv(a,10);for(i=0;i10;i+)printf(“%dw,ai);printf(*n*);return0;)voidinv(intx,intn)inttemp,i,j,m=(n-1)/2;for(i=0;i=m;i+)j=n-1-i;temp=xi;xi=xj;xj=temp;)例8.9改写例8.8,用指针变量作实参。例8.10用指针方法对10个整数按由大到小顺序排序。A解题思路: 在主函数中定义数组a存放10个整数,定义int*型指针变量P指向a0 定义函数Sort使数组a中的元索按由大到小的顺序排列 在主函数中调用Sort函数,用指针P作实参 用选择法进行排序inc1ude
10、intmain()voidsort(intx,intn);inti,*p,a10;P=a;for(i=0i10ji)scanf(“%d”,p+);P=a;sort(p,10);for(p=a,i=0;i10;i+)printf(%d”,*p);p+;printf(*n*);return0;)voidsort(intx,intn)iti,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1jxk)k=j;if(k!=i)t=xi;xi=xk;xk=t;) 8.3.5通过指针引用多维数组 指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用方法上,多维数
11、组的指针比一维数组的指针要复杂一些。 8.3.5通过指针引用多维数组1.多维数组元素的地址inta34=1,3,5,7),9,11,13,15,17,19,21,23;a代表第。行首地址a+1代表第1行首地址a+2代表第2行首地址a+i代表行号为i的行首地址(按行变化)*(a+i)代表什么?a0代表a00的地址a0+1代表a01的地址a0+2代表a02的地址a0+3代表a03的地址a1代表谁的地址?a1+1代表谁的地址?a1+2代表谁的地址?a1+3代表谁的地址?ai+j代表谁的地址?例8.11二维数组的有关数据(地址和值)inc1udeintmain()inta34=1,3,5,7,9,11
12、,13,15,17,19,21,23);printf(%d,%dnw,a,*a);printf(%d,%dnn,a0,(a+0);printf(*f%d,%dnw,fta0,fta00);printf(%d,%dnw,a1,a+1);printf(%d,%dnw,&a10,*(a+1)+O);printf(ii%dt%dnn,a2,(a+2);printf(%d,%dnw,&a2,a+2);printf(%d,%dnw,a10,*(*(a+1)+O);printf(%d,%dnn,*a2,*(a+2)+0);returnO;printf(%d,%dnw,a,*a);printf(%d,%dnn,a0,(a+0);printf(%d,%dnw,&a0,&a00);printf(w%d,%dnw,a1,a+1);printf(u%dt%dnw,&a10,*(a+1)+O);printf(ti%dt%dnn,a2,*(a+2);printf(%d,%dnw,&a2,a+2);printf(w%d,%dnw,a10,*(*(a+1)+O);printf(%d,%dnw,*a2,*(*(a+2)+0);returnO;printf(%d,%dnw,a,*a);printf(u%dt%dnn,a0,*(a+0);printf(%d,%dnw,&a0,&a00);printf(*tf%d,