欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第九章指针.ppt

    • 资源ID:70990036       资源大小:401KB        全文页数:48页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第九章指针.ppt

    第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针 10-110-1 指针及其引用指针及其引用10-210-2 指针与函数指针与函数10-310-3 数组与指针数组与指针10-410-4 指针与字符串指针与字符串10-510-5 指针数组指针数组10-610-6 多级指针多级指针10-710-7 应用实例应用实例第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针intintintint a,b,c;a,b,c;a,b,c;a,b,c;a=1;a=1;a=1;a=1;b=2;b=2;b=2;b=2;c=ac=ac=ac=a +b;+b;+b;+b;一、指针与指针变量一、指针与指针变量程序片段程序片段 20002000200020002002200220022002200420042004200420062006200620062008200820082008a a a ab b b bc c c c1直接将整数直接将整数直接将整数直接将整数 1 1 1 1 存入变量存入变量存入变量存入变量 a a a a 2直接将整数直接将整数直接将整数直接将整数 2 2 2 2 存入变量存入变量存入变量存入变量 b b b b3 直接直接直接直接将变量将变量将变量将变量 a a a a、b b b b 的值的值的值的值取出,相加后存入变量取出,相加后存入变量取出,相加后存入变量取出,相加后存入变量 c c c c 利利用用变变量量名名,直直利利用用变变量量名名,直直接接存存取取变变量量值值的的方方式式接接存存取取变变量量值值的的方方式式称称为为称称为为“直直接接访访问问直直接接访访问问”。第一节第一节 指针与引用指针与引用第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针 C C 语言提供对内存单元的语言提供对内存单元的语言提供对内存单元的语言提供对内存单元的“间接访问间接访问间接访问间接访问”p_c2000200020002000200220022002200220042004200420042006200620062006200820082008200820102010201020102012201220122012a a a ab b b bc c c c122008a a a a和和和和b b b b相加的结果,相加的结果,相加的结果,相加的结果,*p_cp_cp_cp_c=a a a a+b b b b存存存存放到变量放到变量放到变量放到变量p_cp_cp_cp_c所指出的所指出的所指出的所指出的地址地址地址地址中去。中去。中去。中去。变量的地址称为变量的指针变量的地址称为变量的指针变量的地址称为变量的指针变量的地址称为变量的指针存放地址的变量称为指针变量存放地址的变量称为指针变量存放地址的变量称为指针变量存放地址的变量称为指针变量p_cp_c20082008cp_c=&c3 int int int int a=1,b=2,c,*p_c;a=1,b=2,c,*p_c;a=1,b=2,c,*p_c;a=1,b=2,c,*p_c;p_c=&c;p_c=&c;p_c=&c;p_c=&c;*p_c=a+b;*p_c=a+b;*p_c=a+b;*p_c=a+b;第一节第一节 指针与引用指针与引用第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针二、指针变量的说明二、指针变量的说明 指针变量说明的格式与一般变量说明的格指针变量说明的格式与一般变量说明的格式一致。式一致。数据类型说明符数据类型说明符 *变量名变量名例:例:int int x=2,y,x=2,y,*pxpx;x x,y y是是一般变量一般变量,pxpx为指针型变量为指针型变量 这里,这里,*的作用就是通知系统,变量的作用就是通知系统,变量pxpx是指是指针变量。针变量。被说明为指针的变量只能保存地址量。被说明为指针的变量只能保存地址量。前例:前例:前例:前例:intintintint a=1,b=2,c,*p_c;a=1,b=2,c,*p_c;a=1,b=2,c,*p_c;a=1,b=2,c,*p_c;p_c=&c;p_c=&c;p_c=&c;p_c=&c;第一节第一节 指针与引用指针与引用第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针三、指针的引用和运算三、指针的引用和运算C C语言提供一对与地址有关的运算符:语言提供一对与地址有关的运算符:*与与&。例:例:int int x=2,y,x=2,y,*pxpx;pxpx=&x;x;取变量取变量x x的地址赋值给指针的地址赋值给指针pxpx y=*y=*pxpx;y=x;y=x;y=*y=*pxpx*100;*100;y=x*100;y=x*100;*pxpx=10;=10;x=10;x=10;2 2x xffd8ffd8pxpxffdcffdcff9dff9dy yffdaffda2 2 2 22002001010第一节第一节 指针与引用指针与引用第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针 *运算符的意义运算符的意义在数据类型说明中出现在数据类型说明中出现“*变量名变量名”说明说明*后的变量是一个指针变量。后的变量是一个指针变量。例如前例的:例如前例的:int int x=2,y,*x=2,y,*pxpx;在表达式中出现在表达式中出现“*变量名变量名”说明到说明到*后变量中的地址取出内容参加运算。后变量中的地址取出内容参加运算。例如前例的:例如前例的:y=x*100;y=x*100;赋值号的左值是赋值号的左值是“*变量名变量名”将赋值号的右值送到将赋值号的右值送到*后的变量指示的地址单后的变量指示的地址单元中。元中。例如前例的:例如前例的:*pxpx=10;=10;第一节第一节 指针与引用指针与引用第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针四、指针变量的初始化四、指针变量的初始化 在在说明指针变量的时候赋初值。说明指针变量的时候赋初值。int int x=2,y,*x=2,y,*pxpx=&x;=&x;用赋值语句为指针变量赋初值。用赋值语句为指针变量赋初值。int int x=2,y,*x=2,y,*pxpx;pxpx=&x;=&x;五、引用指针变量五、引用指针变量第一节第一节 指针与引用指针与引用第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针main()main()main()main()intintintint *p1p1p1p1,*p2p2p2p2,*p p p p,a,b;,a,b;,a,b;,a,b;scanfscanfscanfscanf(“%d%d%d%d%d%d%d%d”,&a,a,a,a,&b);b);b);b);p1p1p1p1=&a;a;a;a;p2p2p2p2=&b;b;b;b;if(ab)if(ab)if(ab)if(ay)return(x);if(xy)return(x);if(xy)return(x);if(xy)return(x);else return(y);else return(y);else return(y);else return(y);main()main()main()main()int int int int maxmaxmaxmax(),a,b,c;(),a,b,c;(),a,b,c;(),a,b,c;intintintint (*p)(*p)(*p)(*p)();p p p p =maxmaxmaxmax;scanfscanfscanfscanf(“%d%d”,&a,&b);(“%d%d”,&a,&b);(“%d%d”,&a,&b);(“%d%d”,&a,&b);c=c=c=c=(*p)(*p)(*p)(*p)(a,b);(a,b);(a,b);(a,b);printfprintfprintfprintf(“max=%d”,c);(“max=%d”,c);(“max=%d”,c);(“max=%d”,c);二、用函数指针变量调用函数二、用函数指针变量调用函数1 1 1 1.函数名是函数的入口地址。函数名是函数的入口地址。函数名是函数的入口地址。函数名是函数的入口地址。用指针变量储存此地址。用指针变量储存此地址。用指针变量储存此地址。用指针变量储存此地址。2 2 2 2.说明指向函数的指针变量:说明指向函数的指针变量:说明指向函数的指针变量:说明指向函数的指针变量:“(*(*(*(*p)p)p)p)”说明说明说明说明p p p p是指针变是指针变是指针变是指针变量,量,量,量,由于优先级的问题,由于优先级的问题,由于优先级的问题,由于优先级的问题,此处此处此处此处()()()()是必须的。是必须的。是必须的。是必须的。“()()()()”指出是指向函数的,指出是指向函数的,指出是指向函数的,指出是指向函数的,“intintintint”说明函数的返回说明函数的返回说明函数的返回说明函数的返回值值值值 是整型的,是整型的,是整型的,是整型的,“intintintint*p();*p();*p();*p();”何意何意何意何意3 3 3 3.用指针变量调用函数。用指针变量调用函数。用指针变量调用函数。用指针变量调用函数。/*/*1*/*/*/*2*/*/*/*3*/*/第二节第二节 指针与函数指针与函数第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针 指向函数的指针变量可以作为函数的参数指向函数的指针变量可以作为函数的参数,主调函数需要调用不同的函数求解问题。主调函数需要调用不同的函数求解问题。三、用指向函数的指针变量做函数的参数三、用指向函数的指针变量做函数的参数例:梯形法求定积分的函数例:梯形法求定积分的函数例:梯形法求定积分的函数例:梯形法求定积分的函数s=hs=hs=hs=h (f(a)+f(b)/2(f(a)+f(b)/2(f(a)+f(b)/2(f(a)+f(b)/2+f(a+h)f(a+h)f(a+h)f(a+h)+f(a+2h)f(a+2h)f(a+2h)f(a+2h)+f(a+(n-1)h)f(a+(n-1)h)f(a+(n-1)h)f(a+(n-1)h)integral(fintegral(fintegral(fintegral(f,上界上界上界上界a a a a,下界下界下界下界b b b b)求求求求第一项第一项第一项第一项;h=(b-a)/n;h=(b-a)/n;h=(b-a)/n;h=(b-a)/n;for(i=1;in;i+)for(i=1;in;i+)for(i=1;in;i+)for(i=1;in;i+)s=s+s=s+s=s+s=s+f f f f (a+i*h)(a+i*h)(a+i*h)(a+i*h);y y y y =s s s s *h;h;h;h;return(y);return(y);return(y);return(y);如何解决如何解决如何解决如何解决integralintegralintegralintegral函数适用于不同的被积函数适用于不同的被积函数适用于不同的被积函数适用于不同的被积函数?函数?函数?函数?float(*f)(float(*f)(float(*f)(float(*f)(),a,b;a,b;a,b;a,b;被积函数被积函数被积函数被积函数(*f)(*f)(*f)(*f)(a+i*h)(a+i*h)(a+i*h)(a+i*h)通过指向函数的指通过指向函数的指通过指向函数的指通过指向函数的指针变量调用函数针变量调用函数针变量调用函数针变量调用函数第二节第二节 指针与函数指针与函数第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针 数组元素是内存的一个单元,数组元素是内存的一个单元,故指向数组元素的指针变量的故指向数组元素的指针变量的性质和指向变量的指针变量是性质和指向变量的指针变量是一样的。一样的。例如:例如:intint a10,a10,*p*p;p=&a0;p=&a0;也可以在说明语句对指针赋也可以在说明语句对指针赋初值:初值:例如:例如:intint a10,a10,*p=&a0;p=&a0;一、通过指针引用一维数组的元素一、通过指针引用一维数组的元素a0a0a9a9p p执行语句:执行语句:p=&a1;第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针引用数组元素的方式引用数组元素的方式下标方式下标方式 a3=1;a3=1;下标运算符下标运算符 做两件事:做两件事:1.1.计算元素的地址计算元素的地址 a+2*a+2*该数据类型长度。该数据类型长度。2.2.对计算出的地址赋值或取内容。对计算出的地址赋值或取内容。指针方式指针方式 *(p+3)=1p+3)=1;1.1.小括号内进行地址运算,小括号内进行地址运算,2.2.*运算实现赋值或取内容。运算实现赋值或取内容。第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针数组名数组名数组名数组名是地址,指向数组的是地址,指向数组的是地址,指向数组的是地址,指向数组的指针变量指针变量指针变量指针变量是地址。通过指是地址。通过指是地址。通过指是地址。通过指针变量也可以引用数组元素。针变量也可以引用数组元素。针变量也可以引用数组元素。针变量也可以引用数组元素。p p p p =&a0&a0&a0&a0 等效于等效于等效于等效于 p p p p =a a a a。二、数组名和指向数组的指针变量二、数组名和指向数组的指针变量p+1p+1a0a0a9a9p pa1a1 .1 12 23 34 45 56 67 78 89 91010p+2p+2p+3p+3p+4p+4p+5p+5.p+9p+9for(i=0;i10;i+)for(i=0;i10;i+)printfprintf(“%dn%dn”,aiai););for(i=0;i10;i+)for(i=0;i10;i+)printfprintf(“%dn%dn”,*(p+ip+i););=a aa+1a+1a+2a+2a+3a+3a+4a+4a+5a+5.a+9a+9p0p0p1p1p2p2p3p3p4p4p5p5.p9p9for(i=0;i10;i+)for(i=0;i10;i+)printfprintf(“%dn%dn”,*,*(a+ia+i););for(i=0;i10;i+)for(i=0;i10;i+)printfprintf(“%dn%dn”,pipi););=数组名数组名数组名数组名和指向数组的和指向数组的和指向数组的和指向数组的指针变量指针变量指针变量指针变量的区别:的区别:的区别:的区别:指针变量指针变量指针变量指针变量p p p p是是是是变量变量变量变量可以赋值可以赋值可以赋值可以赋值,数组名数组名数组名数组名a a a a是地址是地址是地址是地址常量常量常量常量不能赋值。不能赋值。不能赋值。不能赋值。第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针例例:main(main()int int a a=1,2,3,4,5,6=1,2,3,4,5,6 ;int int*p p;p p =a a;printfprintf(“%d d”,*p p););printfprintf(“%dndn”,*(+p+p ););printfprintf(“%d d”,*+p+p););printfprintf(“%dndn”,*(p-p-););p p +=3;3;printfprintf(“%d%dn%d%dn”,*p p,*(a a +3 3 ););a0a0a1a1a2a2a3a3a4a4a5a5p p1 12 23 34 45 56 6123354例例例例C10C10C10C10_301_301_301_301第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针多维数组名多维数组名的性质的性质 多维数组名是数组的多维数组名是数组的首地址首地址。例如:例如:i intnt a a3344;数组数组名名a a在程序中是数组的首地址。在程序中是数组的首地址。那么,那么,a a00、a a11、a a22 呢?呢?也是地址量。也是地址量。把二维数组名,可把二维数组名,可理解理解成下面的图。成下面的图。四、指向多维数组的指针变量四、指向多维数组的指针变量a a00a a11a a22a aa a0000a a1010a a2020a a0101a a1111a a2121a a0202a a1212a a2222a a0303a a1313a a2323a a第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针?a a a a 、a a a a0000 是是是是 a a a a00000000的地址,是第一行的首地址。的地址,是第一行的首地址。的地址,是第一行的首地址。的地址,是第一行的首地址。a a0000a a1010a a2020a a0101a a1111a a2121a a0202a a1212a a2222a a0303a a1313a a2323a a00a a11a a22a aa+1a+1a+1a+1、a a a a1111是是是是 a a a a11110000的地址,是第二行的首地址。的地址,是第二行的首地址。的地址,是第二行的首地址。的地址,是第二行的首地址。*a a a a是是是是a a a a0000的的的的内容内容内容内容,*a a a a 是是是是 a a a a00000000。a a a a 是是是是二二二二维数组,经过维数组,经过维数组,经过维数组,经过两两两两次次次次操作,才能访问到数组元素。操作,才能访问到数组元素。操作,才能访问到数组元素。操作,才能访问到数组元素。所以根据所以根据所以根据所以根据C C C C的地址计算方法,的地址计算方法,的地址计算方法,的地址计算方法,a a a a经过两次经过两次经过两次经过两次 *操作才能操作才能操作才能操作才能访问到数组元素。这样有:访问到数组元素。这样有:访问到数组元素。这样有:访问到数组元素。这样有:*a a a a是是是是 a a a a0000的内容,的内容,的内容,的内容,*a a a a 才才才才是是是是 a a a a00000000。a a a a0000是是是是a a a a00000000的地址的地址的地址的地址,*,*,*,*a a a a0000是是是是a a a a00000000的的的的内容。内容。内容。内容。第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针例:例:已知:已知:intint a34=a34=1,2,3,4,1,2,3,4,5,6,7,8,5,6,7,8,9,10,11,129,10,11,12;求:求:A)*(a+6)A)*(a+6)B)*(&a0+6)B)*(&a0+6)C)*(a1+=2)C)*(a1+=2)D)*(&a00+6)D)*(&a00+6)例例例例C9C9C9C9_303_303_303_303指到数组元素之后指到数组元素之后指到数组元素之后指到数组元素之后a1a1是地址常量不能赋值是地址常量不能赋值指向指向a12a12第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针指向数组元素的指针指向数组元素的指针 int int a a34;34;int int*p p;p p=a a;p p是一个指向是一个指向intint型的指针变量,型的指针变量,p p现在储存现在储存a a的首地址,即的首地址,即a a0000的地址。的地址。p+1p+1是是a a0101的地址。的地址。决定指针运算时地址增量的单位长度在于决定指针运算时地址增量的单位长度在于说明语句。说明语句。第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针指向由指向由m m个整数组成的一维数组的指针变量个整数组成的一维数组的指针变量 如何使指针变量指向数组的下一行?如何使指针变量指向数组的下一行?在说明语句必须通知系统地址增量的长度。在说明语句必须通知系统地址增量的长度。int int *p p mm;(;(对于上例对于上例m=4)m=4)()*p p必须用括号括起来。必须用括号括起来。因为因为 运算的优先级高于运算的优先级高于*运算,没有括号运算,没有括号则解释为则解释为p p和和 结合,先将结合,先将p p44解释为一个数组,解释为一个数组,再解释前面的再解释前面的*,是一个指针数组。,是一个指针数组。由于括号将由于括号将(*p p)一体解释,一体解释,p p是一个指针变量。是一个指针变量。第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针 对于指针的三种基本运算对于指针的三种基本运算指针与正整数的加减运算指针与正整数的加减运算两个指针的关系运算两个指针的关系运算两个指针的减法运算两个指针的减法运算与指针相关的运算操作与指针相关的运算操作取地址运算取地址运算(&)取内容运算取内容运算(*)五、指针基本运算五、指针基本运算第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针指针与正整数的加减法指针与正整数的加减法 当指针当指针p p指向数组中的元素时,指向数组中的元素时,n n为正整数:为正整数:p+n p+n表示:表示:p p所指向当前元素所指向当前元素之后之后的第的第n n个元素;个元素;p-np-n表示:表示:p p所指向当前元素所指向当前元素之前之前的第的第n n个元素。个元素。p+p+和和+p p含义:含义:p p加加1 1指向数组中的指向数组中的下一下一个元素;个元素;p-p-和和-p p含义:含义:p p减减1 1指向数组中的指向数组中的前一前一个元素。个元素。p-2p-1pp+1p+2.p-3.数组数组低地址低地址高地址高地址第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针运行运行程序程序,分析运行结果。,分析运行结果。#include”include”stdiostdio.h”.h”#define SIZE 4#define SIZE 4main()main()intint datesSIZE,*datesSIZE,*ptipti,index;,index;float billsSIZE,*float billsSIZE,*ptfptf;ptipti=dates;=dates;ptfptf=bills;=bills;forfor(index=0;indexSIZE;index+)(index=0;index、=、!=!=、=的关系运算。的关系运算。当指针当指针和指针和指针指向同一数组的元素时,指向同一数组的元素时,关系表达式关系表达式 当当p p所所指指的的元元素素在在所所指指的的元元素素之之前前时时,表表达达式式成立;反之,表达式不成立。成立;反之,表达式不成立。关系表达式关系表达式 =当当p p和和q q指指向向同同一一元元素素时时,表表达达式式成成立立;反反之之,表达式不成立。表达式不成立。指指针针p p与与NULLNULL进进行行“p=p=NULLNULL”或或“p p!=NULL!=NULL”运运算均有意义:判断指针算均有意义:判断指针p p是否指向空。是否指向空。第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针两个指针之间的减法运算两个指针之间的减法运算 当当两两个个指指针针指指向向同同一一数数组组中中的的元元素素时时,才才能能进进行行指指针针间间的的减减法法运运算算,当当两两个个指指针针分分别别指指向向不同数组不同数组中的元素时,减法运算中的元素时,减法运算无无意义。意义。当当两两个个指指针针指指向向同同一一数数组组中中的的元元素素时时,p-qp-q就就表表示示指指针针p p和和q q所所指指对对象象之之间间的的元元素素占占用用内内存存单元的数量单元的数量。第三节第三节 数组与指针数组与指针第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针例例:编写函数,求字符串的长度。编写函数,求字符串的长度。strlenstrlen(char*s)(char*s)/*/*求串求串s s的长度的长度*/*/char*p=s;char*p=s;while(*p)p+;while(*p)p+;/*/*/*/*找到串结束标记找到串结束标记找到串结束标记找到串结束标记0*/0*/0*/0*/return(return(p-sp-s););/*/*指向同一数组的两个指针指向同一数组的两个指针*/*/*/*进行减法运算,求出串长进行减法运算,求出串长*/*/a a b b c c d d e e f f 00p ps s第四节第四节 指针与字符串指针与字符串第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针例例:编写递归函数,求字符串的长度。编写递归函数,求字符串的长度。算法分析:算法分析:若当前字符为若当前字符为00,则串长为,则串长为0 0;将串分为两部分:将串分为两部分:第一个字符第一个字符和和其它部分其它部分a a b c d e f g h 0b c d e f g h 0 串长串长=1 1+其余部分的长度其余部分的长度程序程序 strlenstrlen(char*s)(char*s)/*/*将串将串s s的长度的长度*/*/if(*s if(*s =0)return(0);0)return(0);else else return(return(1 1+strlen(+strlen(s+1 s+1););第四节第四节 指针与字符串指针与字符串第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针例:例:用递归算法实现字符串反向。用递归算法实现字符串反向。A A B B C C D D E E F F G G H H I I J J0000思路:思路:思路:思路:1.1.1.1.将给定的字符串分为两个部分:将给定的字符串分为两个部分:将给定的字符串分为两个部分:将给定的字符串分为两个部分:第一个和最后一个字符是一部分,此两个字符交换。第一个和最后一个字符是一部分,此两个字符交换。第一个和最后一个字符是一部分,此两个字符交换。第一个和最后一个字符是一部分,此两个字符交换。从第二个到倒数第二个是一部分,和原给问题性质一从第二个到倒数第二个是一部分,和原给问题性质一从第二个到倒数第二个是一部分,和原给问题性质一从第二个到倒数第二个是一部分,和原给问题性质一样,规模缩小。样,规模缩小。样,规模缩小。样,规模缩小。2.2.2.2.当剩下的字符串小于当剩下的字符串小于当剩下的字符串小于当剩下的字符串小于2 2 2 2时,停止递归。时,停止递归。时,停止递归。时,停止递归。可能两种情况,剩下一个字符,交换前后的位置不变,可能两种情况,剩下一个字符,交换前后的位置不变,可能两种情况,剩下一个字符,交换前后的位置不变,可能两种情况,剩下一个字符,交换前后的位置不变,剩下剩下剩下剩下0 0 0 0个字符。个字符。个字符。个字符。例例例例C9C9C9C9_401_401_401_401J J B B C C D D E E F F G G H H I I A A0B B C C D D E E F F G G H H I IA0J J I I H H G G E E F F D D C C B B A A0E E F Fsp第四节第四节 指针与字符串指针与字符串第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针例例例例C10_402C10_402C10_402C10_402#include include include include“string.hstring.hstring.hstring.h”fun(char*w,fun(char*w,fun(char*w,fun(char*w,intintintint n)n)n)n)char t,*s1,*s2;char t,*s1,*s2;char t,*s1,*s2;char t,*s1,*s2;s1=w s1=w s1=w s1=w;s2=w+n-1;s2=w+n-1;s2=w+n-1;s2=w+n-1;while(s1s2)while(s1s2)while(s1s2)while(s1s2)t=*s1+t=*s1+t=*s1+t=*s1+;*s1=*s2-*s1=*s2-*s1=*s2-*s1=*s2-;*s2=t *s2=t *s2=t *s2=t;main()main()char*p=char*p=”12345671234567”;fun(p,fun(p,strlenstrlen(p);(p);printfprintf(“%s%s”,p);,p);A)A)7654321 7654321 B)B)17141711714171C)C)1711717 1711717 D)D)71771717177171 1 2 3 4 5 6 7s1s2例例例例C10C10C10C10_402_402_402_4021t7ts17s211s11s27s17s21 计算机根计算机根据据字符串字符串的长的长度将其在内存度将其在内存的某个区域进的某个区域进行存储,然后行存储,然后将字符串的首将字符串的首地址赋给指针地址赋给指针变量变量p。12345670 FFB2FFB3FFB4FFB5FFB6FFB7FFB8FFB9FFB1 FFBA FFBBFFB1变量变量p 第四节第四节 指针与字符串指针与字符串第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针指针数组就是数组的每个元素都是指针。指针数组就是数组的每个元素都是指针。指针数组就是数组的每个元素都是指针。指针数组就是数组的每个元素都是指针。格式:格式:格式:格式:类型标识类型标识类型标识类型标识 *数组名数组名数组名数组名 数组长度数组长度数组长度数组长度 如如如如:int int int int*p4;p4;p4;p4;这是有四个元素的指针数组。这是有四个元素的指针数组。这是有四个元素的指针数组。这是有四个元素的指针数组。再如字符数组:再如字符数组:再如字符数组:再如字符数组:char char char char namenamenamename16161616=“Follow MeFollow MeFollow MeFollow Me ”,”,”,”,“BASICBASICBASICBASIC ”,“Great WallGreat WallGreat WallGreat Wall ”,”,”,”,“FOTRANFOTRANFOTRANFOTRAN ”,”,”,”,“Computer designComputer designComputer designComputer design ”;一、指针数组的概念一、指针数组的概念F F o o l l l l o o w w M M e e 0B B A A S S I I C C 0G G r r e e a a t t W W a a l l0l lF F O O T T R R A A N N 0C C o o m m p p u u t t e e r r 0d d e e s s i i g g n n 第五节指针数组第五节指针数组第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针改用指针数组:改用指针数组:改用指针数组:改用指针数组:Char Char Char Char*name=“Follow Me”,”BASIC”,”Great name=“Follow Me”,”BASIC”,”Great name=“Follow Me”,”BASIC”,”Great name=“Follow Me”,”BASIC”,”Great Wall”,Wall”,Wall”,Wall”,“FORTRAN”,”Computer design”;“FORTRAN”,”Computer design”;“FORTRAN”,”Computer design”;“FORTRAN”,”Computer design”;F F o o l l l l o o w w M M e e 0B B A A S S I I C C 0G G r r e e a a t t W W a a l l0l lF F O O T T R R A A N N 0C C o o m m p p u u t t e e r r 0d d e e s s i i g g n nname0name0name1name1name2name2name3name3name4name4namename例例例例C9C9C9C9_501_501_501_501第五节指针数组第五节指针数组第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针例例:输入星期几,输出对应星期的英文名称。输入星期几,输出对应星期的英文名称。char*char*week_dayweek_day8=8=sundaysunday,mondaymonday,tuesdaytuesday,wednesdaywednesday,thursdaythursday,fridayfriday,saturdaysaturday,NULL;,NULL;main()main()intint day;day;char*p,*char*p,*lookstrlookstr();();printfprintf(Enter day:);(Enter day:);scanfscanf(%d,&day);(%d,&day);p=p=lookstrlookstr(week_dayweek_day,day);,day);printfprintf(%sn,p);(%sn,p);第五节指针数组第五节指针数组第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针char*char*lookstrlookstr(tabletable,day),day)char char*table*table;int int day;day;intint i;i;forfor(i=0i=0;idayiday&tabletablei!=NULLi!=NULL;i+i+);ifif(i=day&(i=day&tabletablei!=NULL)i!=NULL)return(return(table tableday);day);else else return(NULL);return(NULL);例例例例C9_502C9_502C9_502C9_502函数的返回值函数的返回值函数的返回值函数的返回值为指向字符的为指向字符的为指向字符的为指向字符的指针指针指针指针传递指传递指传递指传递指向字符向字符向字符向字符串的指串的指串的指串的指针数组针数组针数组针数组 第五节指针数组第五节指针数组第九章第九章第九章第九章第九章第九章 指针指针指针指针指针指针mainmain函数可以有参数函数可以有参数:例如:例如:main(main(argcargc,argvargv)int argcint argc;char*char*argvargv;DOSDOS操作系统在执行用户命令时,系统储存操作系统在执行用户命令时,系统储存了用户命令中字符串的个数(以空格分隔),了用户命令中字符串的个数(以空格分隔),以及各个字符串。以及各个字符串。二、带参数的二、带参数的main函数函数例例例例C9C9C9C9_503_503_503_503第五节指针数组第五节指针数组第九章第九章第九章第九章第九章

    注意事项

    本文(第九章指针.ppt)为本站会员(hyn****60)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开