指针与二维数组.ppt

上传人:小** 文档编号:89079936 上传时间:2019-05-17 格式:PPT 页数:48 大小:433.50KB
返回 下载 相关 举报
指针与二维数组.ppt_第1页
第1页 / 共48页
指针与二维数组.ppt_第2页
第2页 / 共48页
指针与二维数组.ppt_第3页
第3页 / 共48页
指针与二维数组.ppt_第4页
第4页 / 共48页
指针与二维数组.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《指针与二维数组.ppt》由会员分享,可在线阅读,更多相关《指针与二维数组.ppt(48页珍藏版)》请在金锄头文库上搜索。

1、第六节 二维数组和指针,对于一维数组: (1)数组名array表示数组的首地址, 即array0的地址; (2)数组名array是地址常量 (3)array+i是元素arrayi的地址 (4)arrayi *(array+i),二维数组的地址,对于二维数组: (1)a是数组名, 包含三个元素 a0,a1,a2 (2)每个元素ai 又是一个一维 数组,包含4个 元素,int a3 ;,基类型,行指针与列指针,4,int a34;,地址 a0+0 a0+1 a0+2 a0+2 a1+0 a1+1 a1+2 a1+2 a2+0 a2+1 a2+2 a2+2,对应值 *(a0+0) *(a0+1) *

2、(a0+2) *(a0+2) *(a1+0) *(a1+1) *(a1+2) *(a1+2) *(a2+0) *(a2+1) *(a2+2) *(a2+2),对二维数组 int a34,有 a-二维数组的首地址,即第0行的首地址 a+i-第i行的首地址 ai *(a+i)-第i行第0列的元素地址 ai+j *(a+i)+j -第i行第j列的元素地址 *(ai+j) *(*(a+i)+j) aij,a+i=&ai=ai=*(a+i) =&ai0, 值相等,含义不同 a+i &ai,表示第i行首地址,指向行 ai *(a+i) &ai0,表示第i行第0列元素地址,指向列,二维数组元素表示形式: (

3、1)a12 (2)*(a1+2) (3)*(*(a+1)+2) (4)*(&a00+1*4+2),地址表示: (1) a+1 (2) &a10 (3) a1 (4) *(a+1) (5)(int *) (a+1),地址表示: (1) &a12 (2) a1+2 (3) *(a+1)+2 (4)&a00+1*4+2,例 指向二维数组元素的指针变量,main() static int a34=1,3,5,7,9,11,13,15,17,19,21,23; int *p; for(p=a0;pa0+12;p+) if(p-a0)%4=0) printf(“n“); printf(“%4d “,*p)

4、; ,p=*a; p=,指向二维数组元素的指针变量,指向一维数组的指针变量 定义形式: 数据类型 (*指针名)一维数组维数; 例 int (*p)4;,( )不能少 int (*p)4与int *p4不同,p的值是一维数组的 首地址,p是行指针,可让p指向二维数组某一行 如 int a34, (*p)4=a;,一维数组指针变量维数和 二维数组列数必须相同,例 一维数组指针变量举例,main() static int a34=1,3,5,7,9,11,13,15,17,19,21,23; int i,j,(*p)4; for(p=a,i=0;i3;i+,p+) for(j=0;j4;j+) pr

5、intf(“%d “,*(*p+j); printf(“n“); ,p=a0; p=*a; p=, p0j,指向指针的指针(二级指针),main() int a34= 1,2,3,4, 3,4,5,6, 5,6,7,8 ; int i; int *p=a; for(i=0;i3;i+) for (j=0;j4;j+) printf(“%d,“, *(*(p+i)+j); ,格式: 类型名 *指针名;,第七节 二维数组的指针作函数参数,一、 形参的格式,1. 用指向数组的指针变量 例:fun(double (*p)N,2. 用二维数组 例:fun(double aN); 或: fun(doubl

6、e aMN,3. 用二级指针 例:fun(double *p);,4. 用指针数组 例:fun(double *aM); 或 fun(double *a);,例 3个学生各学4门课,计算总平均分,并输出第n个学生成绩,main() void average(float *p,int n); void search(float (*p)4,int n); float score34= 65,67,79,60,80,87,90,81, 90,99,100,98; average(*score,12); search(score,2); ,void average(float *p,int n) f

7、loat *p_end, sum=0,aver; p_end=p+n-1; for(;p=p_end;p+) sum=sum+(*p); aver=sum/n; printf(“average=%5.2fn“,aver); void search(float (*p)4, int n) int i; printf(“ No.%d :n“,n); for(i=0;i4;i+) printf(“%5.2f “,*(*(p+n)+i); ,列指针,行指针,函数说明,float p4, pni,例 3个学生各学4门课,计算总平均分,并查找一门以上课 不及格学生, 输出其各门课成绩, pji,输出杨辉三

8、角形(程序见P133),1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1,分析 特点是: 第一列是1 对角线为1 从第三行开始,每数是它上面前一列和它对应列的和 可用 aij=ai-1j-1+ai-1j表示,6.4 指针与字符串 字符串表示形式 用字符数组实现,例 main( ) char string=“I love China!”; printf(“%sn”,string); printf(“%sn”,string+7); ,String+7,运行结果:,I love China!,China!,用字符指针实现,例 mai

9、n( ) char *string=“I love China!”; printf(“%sn”,string); string+=7; while(*string) putchar(*string); string+; ,字符指针初始化:把字符串首地址赋给string char *string; string=“I love China!”;,*string!=0,字符串指针作函数参数,例 用函数调用实现字符串复制,(1)用字符数组作参数,(2)用字符指针变量作参数,void copy_string(char from,char to) int i=0; while(fromi!=0) toi

10、=fromi; i+; toi=0; main() char a=“I am a teacher.“; char b=“You are a student.“; printf(“string_a=%sn string_b=%sn“,a,b); copy_string(a,b); printf(“nstring_a=%snstring_b=%sn“,a,b); ,void copy_string(char *from,char *to) for(;*from!=0;from+,to+) *to=*from; *to=0; main() char *a=“I am a teacher.“; cha

11、r *b=“You are a student.“; printf(“string_a=%snstring_b=%sn“,a,b); copy_string(a,b); printf(“nstring_a=%snstring_b=%sn“,a,b); ,字符指针变量与字符数组 char *cp; 与 char str20; str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址 char str20; str=“I love China!”; () char *cp; cp=“I love China!”; () str是地址常量;cp是地址变量 cp接受键入字符串时,必须先开辟存

12、储空间,例 char str10; scanf(“%s”,str); () 而 char *cp; scanf(“%s”, cp); (),改为: char *cp,str10; cp=str; scanf(“%s”,cp); (),字符串与数组关系 字符串用一维字符数组存放 字符数组具有一维数组的所有特点 数组名是指向数组首地址的地址常量 数组元素的引用方法可用指针法和下标法 数组名作函数参数是地址传递等 区别 存储格式:字符串结束标志 赋值方式与初始化 输入输出方式:%s %c,char str=“Hello!”; () char str=“Hello!”; () char str=H,e

13、,l,l,o,!; () char *cp=“Hello”; () int a=1,2,3,4,5; () int *p=1,2,3,4,5; (),char str10,*cp; int a10,*p; str=“Hello”; () cp=“Hello!”; () a=1,2,3,4,5; () p=1,2,3,4,5; (),scanf(“%s”,str); printf(“%s”,str); gets(str); puts(str);,6.5 指针与函数 函数指针:函数在编译时被分配的入口地址,用函数名表示,函数指针变量赋值:如p=max;,函数返回值的数据类型,专门存放函数入口地址

14、可指向返回值类型相同的不同函数,指向函数的指针变量 定义形式: 数据类型 (*指针变量名)(); 如 int (*p)();,函数指针变量指向的函数必须有函数说明,函数调用形式: c=max(a,b); c=(*p)(a,b); c=p (a,b); 对函数指针变量pn, p+, p-无意义,( )不能省 int (*p)() 与 int *p()不同,例 用函数指针变量调用函数,比较两个数大小,main() int max(int ,int); int a,b,c; scanf(“%d,%d“, ,main() int max(int ,int), (*p)(); int a,b,c; p=max; scanf(“%d,%d“, ,用函数指针变量作函数参数,例 用函数指针变量作参数,求最大值、最小值和两数之和,6.6 返回指针值的函数 函数定义形式: 类型标识符 *函数名(参数表); 例 int *f(int x, int y),例 指针函数实现:有若干学生成绩,要求输入学生序号后, 能

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号