清华大学5备课讲稿

上传人:youn****329 文档编号:271411375 上传时间:2022-03-29 格式:PPT 页数:71 大小:345.50KB
返回 下载 相关 举报
清华大学5备课讲稿_第1页
第1页 / 共71页
清华大学5备课讲稿_第2页
第2页 / 共71页
清华大学5备课讲稿_第3页
第3页 / 共71页
清华大学5备课讲稿_第4页
第4页 / 共71页
清华大学5备课讲稿_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《清华大学5备课讲稿》由会员分享,可在线阅读,更多相关《清华大学5备课讲稿(71页珍藏版)》请在金锄头文库上搜索。

1、第第6 6章章 指针及其应用指针及其应用 1 1清华大学清华大学 黄维通黄维通 设计制作设计制作本章主要内容本章主要内容针的基本概念及定义方式针的基本概念及定义方式指针的运算指针的运算指针与数组指针与数组字符指针和字符串字符指针和字符串指针数组指针数组指针在函数参数传递中的应用指针在函数参数传递中的应用指针型函数指针型函数多级指针多级指针指向函数的指针指向函数的指针动态指针动态指针2 2清华大学清华大学 黄维通黄维通 设计制作设计制作6.1 指针的基本概念及定义方式指针的基本概念及定义方式3 3清华大学清华大学 黄维通黄维通 设计制作设计制作指针定义的一般形式为:指针定义的一般形式为:类型标识

2、符类型标识符*指针名指针名1,*指针名指针名2,;6.1.2 指针的定义指针的定义数据具有不同的类数据具有不同的类型,定义指针时也型,定义指针时也要定义该指针所指要定义该指针所指向的数据类型向的数据类型intint *pn; *pn;char *pch;char *pch;float *pf; float *pf; 5 5清华大学清华大学 黄维通黄维通 设计制作设计制作指针是一种变量,在定义的同时指针是一种变量,在定义的同时可以赋给它初始值,称为指针的初始可以赋给它初始值,称为指针的初始化。化。形式如下:形式如下:类型标识符类型标识符*指针名指针名=初始地址值;初始地址值;例如,例如,intm

3、,n8;charc;int*pm=&m;int*pn=n;char*pc=&c;6.1.3 指针的初始化指针的初始化变量地址作初值时,变量地址作初值时,该变量在此之前已该变量在此之前已说明过,且类型应说明过,且类型应一致。一致。可用已赋初可用已赋初值的指针去初始化值的指针去初始化其他指针变量其他指针变量6 6清华大学清华大学 黄维通黄维通 设计制作设计制作定义:定义:例:例:inti;int*i_pointer;引用:引用:i=3*i_pointer=3&i_pointer=3010i_pointer=20002000i_pointer3*i_pointeri2000内存用户数据区内存用户数据

4、区变量变量i变量变量j变量变量i_pointer3620002000200230107 7清华大学清华大学 黄维通黄维通 设计制作设计制作#include“stdio.h”main()intvar;int*p_var;p_var=&var;var=8888;printf(%dn,var);printf(%dn,*p_var);printf(“%xn”,&var);printf(“%xn”,p_var);printf(“%xn”,&p_var);8 8清华大学清华大学 黄维通黄维通 设计制作设计制作“*”指针运算符,表示指针运算符,表示“指指向向”“&”地址运算符地址运算符intn,*i_poi

5、nt;i_point=&n;&(*i_point)等效于等效于i_point*(&n)等效于等效于n6.1.4 指针运算符指针运算符9 9清华大学清华大学 黄维通黄维通 设计制作设计制作应区分应区分i_ point 、* i_ point 和和& i_ point三者的区别:三者的区别: i_ point:是指针变量,其内容是地址量:是指针变量,其内容是地址量 * i_ point:是指针变量的目标变量是指针变量的目标变量 & i_ point:是指针变量本身所占据的存储地址是指针变量本身所占据的存储地址内存用户数据区内存用户数据区变量变量i变量变量j变量变量i_pointer36200020

6、0020023010i=3*i_pointer=3i_pointer=2000&i_pointer=30101010清华大学清华大学 黄维通黄维通 设计制作设计制作6.2 指针的运算指针的运算赋值赋值关系关系算术算术指指针针运运算算与整数的加减运算、加与整数的加减运算、加1和和减减1运算、运算、指针相减运算指针相减运算在指向在指向相同数据类型相同数据类型的指针的指针之间进行,但指针可以和之间进行,但指针可以和0进行比较,用以判断是否为进行比较,用以判断是否为空指针空指针必须用地址常量或变量赋值,必须用地址常量或变量赋值,不能是普通整数。不能是普通整数。但赋但赋0 0值,表示空指针值,表示空指针

7、1111清华大学清华大学 黄维通黄维通 设计制作设计制作(1)指针与整数的加、减运算指针与整数的加、减运算 指针指针point加上或减去一个整数加上或减去一个整数n,将相对于当前位置前移或后移,将相对于当前位置前移或后移n个存储单元。个存储单元。int*pn;不妨设不妨设pn=0 x0000,那么,那么pn+n=pn+n*sizeof(int)=0 x0000+n*21212清华大学清华大学 黄维通黄维通 设计制作设计制作(2)指针加指针加1和减和减1运算运算指针的加指针的加1和减和减1运算,只是指针与整运算,只是指针与整数的加减运算的特例,例如:数的加减运算的特例,例如:int*pn,n,m

8、;pn=&n;m=*pn+;/先赋值再自加先赋值再自加1313清华大学清华大学 黄维通黄维通 设计制作设计制作(3)指针相减运算指针相减运算同类型的指针变量同类型的指针变量p1和和p2相减,相减,是指针间数据的个数,不是两指针间是指针间数据的个数,不是两指针间的字节数。的字节数。例如:例如:Type*p1,*p2那么有:那么有:p2-p1=(p2-p1)/sizeof(Type)1414清华大学清华大学 黄维通黄维通 设计制作设计制作【例】例】使用指针将两个整数交换顺序使用指针将两个整数交换顺序#include stdio.h#include stdio.hmain()main() int m

9、,n,*pm,*pn,temp; int m,n,*pm,*pn,temp; pm=&m; pn=&n; pm=&m; pn=&n; scanf(%d%d,&m,&n); scanf(%d%d,&m,&n); temp=*pm; temp=*pm; *pm=*pn; *pm=*pn; *pn=temp; *pn=temp; printf(%d,%dn,m,n); printf(%d,%dn,m,n); printf(%d,%dn,*pm,*pn); printf(%d,%dn,*pm,*pn); 在引入指针运在引入指针运算后,数据交算后,数据交换可通过指针换可通过指针所指向的存储所指向的存储地

10、址进行操作地址进行操作m m和和n n的值改的值改变了吗?变了吗?1515清华大学清华大学 黄维通黄维通 设计制作设计制作例:输入例:输入3个数,由大到小排序输出个数,由大到小排序输出main()inta,b,c,*pa,*pb,*pc;scanf(%d,%d,%d,&a,&b,&c);pa=&a;pb=&b;pc=&c;exchange(pa,pb,pc);printf(%d,%d,%dn,a,b,c);printf(%d,%d,%dn,*pa,*pb,*pc);exchange(int*q1,int*q2,int*q3)if(*q1*q2)swap(q1,q2);if(*q1*q3)swa

11、p(q1,q3);if(*q2*q3)swap(q2,q3);swap(int*a,int*b)intp;p=*a;*a=*b;*b=p;1616清华大学清华大学 黄维通黄维通 设计制作设计制作6.3 指针与数组指针与数组 数组名是数组在内存中的数组名是数组在内存中的首地址,且数组的元素在内存首地址,且数组的元素在内存中占用连续的一片存储空间,中占用连续的一片存储空间,因此,可用指针访问数组元素因此,可用指针访问数组元素 1717清华大学清华大学 黄维通黄维通 设计制作设计制作floatx10,*px;/定义数组和指针定义数组和指针px=x;或或px=&x0; / /指针指向数组指针指向数组6

12、.3.1 指向一维数组的指针指向一维数组的指针访问数组元素方法:访问数组元素方法:偏移量法偏移量法,如:,如:*(px+2)/px值值不变不变指针移动法指针移动法,如:,如:px+/px值变化值变化x+x+是不允许的,因为数组名是常量是不允许的,因为数组名是常量*px*px就是就是x0,*(px+i)x0,*(px+i)就是就是xixi。xi,*(px+i),*(x+i)xi,*(px+i),*(x+i)都是等效的都是等效的1818清华大学清华大学 黄维通黄维通 设计制作设计制作【例】使用指针对数组元素进行输入输出【例】使用指针对数组元素进行输入输出#include #include void

13、 main()void main()float data5,*pf=data;float data5,*pf=data; int k; int k; for(k=0;k5;k+) for(k=0;k5;k+) scanf(%f,pf+k); scanf(%f,pf+k); for(k=0;k5;k+) for(k=0;k5;k+) printf(%f,*pf);pf+; printf(%f,*pf);pf+; for(k=0;k5;k+)for(k=0;k5;k+) printf(%f,*(pf+k); printf(%f,*(pf+k); scanf(%f,pf+);区别?区别? pf=da

14、ta; pf=data;1919清华大学清华大学 黄维通黄维通 设计制作设计制作【例】将数组中的元素逆顺存放【例】将数组中的元素逆顺存放#includevoidmain()intdata7=1,2,3,4,5,6,7,temp,k,*ph,*pt;ph=data;pt=data+6;while(ptph)temp=*ph;*ph=*pt;*pt=temp;ph+;pt-;/两指针向中间移动两指针向中间移动for(k=0;k*(a+1)+2=&a12-不能写成不能写成*(a+1+2)2323清华大学清华大学 黄维通黄维通 设计制作设计制作【例】用指针变量输出数组元素的值【例】用指针变量输出数组元

15、素的值#includestdio.hvoidmain()staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;int*p,i,j,n;n=sizeof(a)/sizeof(int);for(p=a0;pa0+n;p+)printf(%d,*p);2424清华大学清华大学 黄维通黄维通 设计制作设计制作例:例:求成绩的平均值求成绩的平均值(二维数组做函数参数二维数组做函数参数)#include“stdio.h”voidaverage(float*p,intn)float*p_end=p+n-1,sum=0,aver;for(;p=p_end;p+)sum=sum+(*p

16、);aver=sum/n;printf(average=%5.2fn,aver);main()staticfloatscore34=60,61,62,63,70,71,72,73,80,81,82,83;average(score,12);2525清华大学清华大学 黄维通黄维通 设计制作设计制作在定义的同时进行初始化在定义的同时进行初始化例如:例如:char*p=”astring”;6.4 字符指针和字符串字符指针和字符串末尾自末尾自动加动加0,标志,标志结束,结束,不计入不计入总长度总长度利用赋值语句初始化利用赋值语句初始化char*s;s=“string”;两种两种初始初始化的化的方法方法2626清华大学清华大学 黄维通黄维通 设计制作设计制作【例】【例】使用指针编写程序,比较两个使用指针编写程序,比较两个字符串的大小字符串的大小(不使用字符串处理函数不使用字符串处理函数)步骤:步骤:定义两个指向字符串的指针定义两个指向字符串的指针通过移动指针进行逐字符比较通过移动指针进行逐字符比较如有字符串如有字符串ABCdEF和和ABCDEF,则认为则认为ABCdEF比比ABCDEF大大原因:

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

当前位置:首页 > 高等教育 > 大学课件

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