欢迎来到天天文库
浏览记录
ID:61502307
大小:64.00 KB
页数:5页
时间:2021-02-07
《C语言教案-第十四周.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第8章指针本节题目指针与一维数组1:本节主要目的1.1教学目的:1、了解指向数组元素的指针变量2、了解通过指针引用数组元素3、了解数组名作函数参数的情况1.2教学内容:1、指向数组元素的指针变量2、通过指针引用数组元素3、数组名作函数参数1.3教学重点:1、通过指针引用数组元素2、数组名作函数参数1.4教学方法:讲授+演示1.5学习方法:听课+笔记+练习2:引入本课内容:[5分钟]在上一节课,学习了地址和指针变量,知道了可以通过指针变量来访问变量中的内容,那么能否通过指针来访问一个数组中的元素呢?能否通过一个指针来访问一个数组呢?3:课程知识点讲解:具体知
2、识点1:指向数组元素的指针变量[15分钟]指针可以指向数组和数组元素,当一个指针指向数组后,对数组元素的访问,既可以使用数组下标,又可以使用指针。指向数组元素的指针变量,其类型应与数组元素相同,例如:inta[10];int*p;p=a;óp=&a[0];具体知识点2:通过指针引用数组元素[30分钟]知识点讲解1、当使指针p指向数组a后,可以用指针p访问数组的各个元素。2、如果指针p指向数组a(指向数组的第一个元素a[0]),则:p+1指向下一个元素a[1],注意不是将p值简单加1。如果数组元素是整型,p+1表示p的地址加2(整型占2个字节);如果数组元素
3、是单精度型,p+1表示p的地址加4(单精度占4个字节);如果数组元素是字符型,p+1表示p的地址加1(字符型占一个字节)。3、若指针变量p指向数组a,则:①p+i指向数组a[i],可以使用*(p+i)访问元素a[i]。②p+i也可以记作a+i,指向数组元素a[i]。③指向数组的指针变量也可以带下标,如:p[i]ó*(p+i)表示元素a[i]。4、若指针p指向数组a,p+i与a+i,*(p+i)与*(a+i)意义相同。但需要注意a是一个常量,其值不能改变,p是一个变量,值可以改变。5、若指针p指向数组a(p=a),则:①p++表示p指向下一个元素②*p++相
4、当于*(p++)③*(p++)与*(++p)的作用不同。*(p++),先取*p,再使p加1;*(++p),先使p加1,再取*p。④(*p)++表示p指向的元素值加1。·案例讲解:比较以下三种输出数组元素的方法:①#includemain(){inta[10];inti;for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“”);for(i=0;i<10;i++)printf(“%d”,a[i]);}②#includemain(){inta[10];inti;for(i=0;i<10;i
5、++)scanf(“%d”,&a[i]);printf(“”);for(i=0;i<10;i++)printf(“%d”,*(a+i));}③#includemain(){inta[10];int*p,i;for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“”);for(p=a;p6、共占同一段内存区域。从而在函数调用后,实参数组的元素值可能会发生变化。·案例讲解1:将数组a中n个元素按相反顺序。编程分析:a[0]与a[n-1]交换,a[1]与a[n-2]交换,……,a[(n-1)/2]与a[n-int((n-1)/2]交换。可以用这样的方法实现:用i,j作元素位置变量,开始i=0,j=n-1。将a[i]与a[j]交换,然后i加1,j减1,直到i=(n-1)/2。voidinv(intx[],intn)/*形参是数组*/{intt,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-it=a[i];a[i]=a[7、j];a[j]=t;}return;}main(){staticinti,a[10]={3,7,8,11,0,6,7,5,4,2};printf(“theorginalarray:”);for(i=0;i<10;i++)printf(“%d”,a[i]);printf(“”);inv(a,10);printf(“thearraybansbeeninverted:”);for(i=0;i<10;i++)printf(“%d”,a[i]);printf(“”);}函数inv()可以用指针作形参,运行情况与用数组作形参相同。上例改为:voidin8、v(int*x,intn){int*p,t,*i,*j,m=(n-
6、共占同一段内存区域。从而在函数调用后,实参数组的元素值可能会发生变化。·案例讲解1:将数组a中n个元素按相反顺序。编程分析:a[0]与a[n-1]交换,a[1]与a[n-2]交换,……,a[(n-1)/2]与a[n-int((n-1)/2]交换。可以用这样的方法实现:用i,j作元素位置变量,开始i=0,j=n-1。将a[i]与a[j]交换,然后i加1,j减1,直到i=(n-1)/2。voidinv(intx[],intn)/*形参是数组*/{intt,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-it=a[i];a[i]=a[
7、j];a[j]=t;}return;}main(){staticinti,a[10]={3,7,8,11,0,6,7,5,4,2};printf(“theorginalarray:”);for(i=0;i<10;i++)printf(“%d”,a[i]);printf(“”);inv(a,10);printf(“thearraybansbeeninverted:”);for(i=0;i<10;i++)printf(“%d”,a[i]);printf(“”);}函数inv()可以用指针作形参,运行情况与用数组作形参相同。上例改为:voidin
8、v(int*x,intn){int*p,t,*i,*j,m=(n-
此文档下载收益归作者所有