1、CONTENTS 目 录提出问题 引入新课自主学习 明确考点案例分析 交流提升仿真演练 体验探索提出问题 引入新课PART 01回顾:1、数组指针的定义、赋值与引用?2、数组指针有什么要点?3、数组指针与数组之间有什么关联?思考:在C语言中,使用数组使编写的程序简洁、明了,但对于一些数据长度不一致的数据,我们如何定义数组呢?提出问题 引入新课自主学习 明确考点PART 02一个数组,如果它的元素都是指针型,则称为指针数组。即数组的元素都是指针变量。一维指针数组的定义形式为:类型名*数组名数据长度;例如:int*p4;由于 比*的优先级高,因此p先与结合,形成p4形式,这显然是数组形式,它有四个
2、元素,其元素的类型是整型指针。考点一:指针数组的定义说明:在书写时,要注意int(*p)4和int*p4的区别。原理:区分两者的优先级别区分两者的优先级别(1)用指针数组元素分别指向二维数组的每一行,通过指针数组元素控制对二维数组每一行元素的操作。结指针元素赋值的格式是:下标=行下标;考点二:指针数组的赋值与使用【例1】通过指针数组对二维数组的元素进行输出操作#includemain()int a33=1,2,3,4,5,6,7,8,9,*pa3;int*p=a0;/*定义指针指向每行元素的值*/int i;for(i=0;i=2;i+)pai=ai;/指针数组元素分别指向每一行 for(i=
3、0;i3;i+)printf(%d,%d,%dn,ai2-i,*ai,*(*(a+i)+i);for(i=0;i3;i+)printf(%d,%d,%dn,*pai,pi,*(p+i);说明:pa是一个指针数组,三个元素分别指三个元素分别指向二维数组向二维数组a a的各行的首地址的各行的首地址。然后用循环语句输出指定的数组元素。其中*ai表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pai表示i行0列元素值;由于p与a0相同,故pi表示0行i列的值;*(p+i)表示0行i列的值。(2)用于对多个字符串的处理,让每个数组元素指向一个字符串常量,或指向存放字符串的字符数组,每个
4、指针数组元素就可以代表一个字符串进行整串的操作。对指针数组元素赋值的格式是:考点二:指针数组的赋值与使用=;考点二:指针数组的赋值与使用【例2】有若干个字符串,输出其中最长的字符串。#include main()char*p=teacher,book,pascal,hello,and,computer design;char*q;int i;q=p0;for(i=1;istrlen(q)q=pi;printf(%sn,q);运行结果为:computer design 说明:程序中用指针变量q记录最长字符串的地址。考点二:指针数组的赋值与使用【例3】有若干长度不等的字符串,请按字母顺序输出(由小
5、到大)。#include main()char*p=teacher,book,pascal,hello,and,me;int n=6,i,j,k;char*temp;for(i=0;in-1;i+)k=i;for(j=i+1;j0)k=j;if(k!=j)temp=pk;pk=pi;pi=temp;for(i=0;in;i+)printf(%sn,pi);案例分析 交流提升PART 03【例1】若有语句:char*line5;,以下叙述中正确的是()A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组C)
6、定义line是一个指针数组,语句中的*号称为间址运算符D)定义line是一个指向字符型函数的指针【例2】有以下程序运行后的输出结果是()main()char ch34=”123”,”456”,”78”,*p3;int i;for(i=0;i3;i+)pi=chi;for(i=0;i=0;i-,i-)printf(%c,*pi);printf(n);【例4】有以下程序运行后的输出结果是()#include main()int a3=1,2,3,4,5,0,(*pa)3,i;pa=a;for(i=0;i3;i+)if(i2)pa1i=pa1i-1;else pa1i=1;printf(%dn,a0
7、1+a11+a12);A)7 B)6 C)8 D)无确定值仿真演练,体验探索PART 041、写出以下程序运行后的输出结果是()main()char *s=“one”,”two”,”three”,*p;p=s1;printf(“%c,%sn”,*(p+1),s0);A)n,two B)t,one C)w,one D)o,two2、读程序写结果main()int a34=1,2,3,4,3,4,5,6,5,6,7,8;int i;int(*p)4=a,*q=a0;for(i=0;i3;i+)if(i=0)(*p)i+i/2=*q+1;else p+,+q;for(i=0;i3;i+)printf(%d,aii);printf(%d,%dn,*(int*)p),*q);3、分析下列程序的运行结果是()main()char ch25=6937,8254,*p2;int i,j,s=0;for(i=0;i2;i+)pi=chi;for(i=0;i0;j+=2)s=10*s+pij-0;printf(%dn,s);