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

    中国科学技术大学培训中心.ppt

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

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

    中国科学技术大学培训中心.ppt

    第第8 8章章 指指 针针C C 语言程序设计语言程序设计中国科学技术大学培训中心中国科学技术大学培训中心中国科学技术大学培训中心中国科学技术大学培训中心主讲教师:隋秀峰主讲教师:隋秀峰主讲教师:隋秀峰主讲教师:隋秀峰2021/9/272 8.1 8.1 8.1 8.1 指针和指针变量指针和指针变量指针和指针变量指针和指针变量 8.2 8.2 8.2 8.2 指针与数组指针与数组指针与数组指针与数组 8.3 8.3 8.3 8.3 指针与函数指针与函数指针与函数指针与函数第第8章章 指针指针2021/9/2738.1 指针和指针变量指针和指针变量 main()main()main()main()float x;float x;float x;float x;int y;int y;int y;int y;8.1.1 8.1.1 指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念变量的两个物理意义变量的两个物理意义 200020002000200020012001200120012002200220022002200320032003200320042004200420042005200520052005x x x xy y y y变量的内容变量的内容变量的地址变量的地址2021/9/2748.1 指针和指针变量指针和指针变量 main()main()main()main()int a,b,c;int a,b,c;int a,b,c;int a,b,c;a=5;a=5;a=5;a=5;b=3;b=3;b=3;b=3;c=a c=a c=a c=a +b;+b;+b;+b;8.1.1 8.1.1 指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念200020002000200020012001200120012002200220022002200320032003200320042004200420042005200520052005a a a ab b b bc c c c5直接将整数直接将整数直接将整数直接将整数 5 5 5 5 存入变量存入变量存入变量存入变量 a a a a 3直接将整数直接将整数直接将整数直接将整数 3 3 3 3 存入变量存入变量存入变量存入变量 b b b b8 直接直接直接直接将变量将变量将变量将变量 a a a a、b b b b 的值的值的值的值取出,相加后存入变量取出,相加后存入变量取出,相加后存入变量取出,相加后存入变量 c c c c 利用变量名利用变量名利用变量名利用变量名存取数据的方式存取数据的方式存取数据的方式存取数据的方式称为称为称为称为“直接存取直接存取直接存取直接存取”方式。方式。方式。方式。2021/9/275 C C 语言语言语言语言还提供了对还提供了对还提供了对还提供了对内存单元的内存单元的内存单元的内存单元的“间接存取间接存取间接存取间接存取”方式方式方式方式p p20002000200020002001200120012001200220022002200220032003200320032004200420042004200520052005200520062006200620062007200720072007a a a ab b b bc c c c532004a a a a和和和和b b b b相加的结果相加的结果相加的结果相加的结果(*p p p p=a a a a+b b b b)存放存放存放存放到变量到变量到变量到变量p p p p所指向的所指向的所指向的所指向的内存单元内存单元内存单元内存单元中去。中去。中去。中去。此时此时此时此时c c c c称为指针变量称为指针变量称为指针变量称为指针变量p p p p的的的的目标变量目标变量目标变量目标变量。p p20042004c cp=&c8 main()main()main()main()int a=5,b=3,c,*p;int a=5,b=3,c,*p;int a=5,b=3,c,*p;int a=5,b=3,c,*p;p=&c;p=&c;p=&c;p=&c;*p=a+b;*p=a+b;*p=a+b;*p=a+b;8.1 指针和指针变量指针和指针变量8.1.1 8.1.1 指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念 变量的地址称为变量的指针变量的地址称为变量的指针变量的地址称为变量的指针变量的地址称为变量的指针 存放地址的变量称为指针变量存放地址的变量称为指针变量存放地址的变量称为指针变量存放地址的变量称为指针变量2021/9/276 main()main()int a,*p int a,*p=&a=&a;float x,*q float x,*q=&x=&x;2000200020002000200120012001200120022002200220022003200320032003200420042004200420052005200520052006200620062006200720072007200720082008200820082009200920092009a a a ap p p px x x xq q q q20048.1 指针和指针变量指针和指针变量8.1.2 8.1.2 指针变量的定义指针变量的定义指针变量的定义指针变量的定义2000 main()main()main()main()int a,*p;int a,*p;int a,*p;int a,*p;float x,*q;float x,*q;float x,*q;float x,*q;p p p p=&a=&a=&a=&a;q q q q=&x=&x=&x=&x;指针变量定义的形式指针变量定义的形式指针变量定义的形式指针变量定义的形式指针变量初始化指针变量初始化指针变量初始化指针变量初始化2021/9/277 main()main()int a,*p int a,*p=&a=&a;float x,*q float x,*q=&x=&x;*p p=5;=5;printf(printf(a+3=%dn,a+3=%dn,*p*p+3);+3);间接存取运算间接存取运算间接存取运算间接存取运算2000200020002000200120012001200120022002200220022003200320032003200420042004200420052005200520052006200620062006200720072007200720082008200820082009200920092009a a a ap p p px x x xq q q q20048.1 指针和指针变量指针和指针变量8.1.3 8.1.3 指针的基本运算指针的基本运算指针的基本运算指针的基本运算2000*p=&a;main()main()main()main()int a,*p;int a,*p;int a,*p;int a,*p;float x,*q;float x,*q;float x,*q;float x,*q;p p p p=&a=&a=&a=&a;q q q q=&x=&x=&x=&x;赋值运算赋值运算赋值运算赋值运算52021/9/278方法方法方法方法1 1 1 1:目标变量值不变,改变指针变量的:目标变量值不变,改变指针变量的:目标变量值不变,改变指针变量的:目标变量值不变,改变指针变量的指向求解。指向求解。指向求解。指向求解。main()main()main()main()int a,b,int a,b,int a,b,int a,b,*p1p1p1p1,*p2p2p2p2,*p p p p;p1p1p1p1=&a;a;a;a;p2p2p2p2=&b;b;b;b;scanf(scanf(scanf(scanf(%d%d%d%d%d%d%d%d,p1p1p1p1,p2p2p2p2););););if(if(if(if(*p1p1p1p1 *p2p2p2p2)p p p p=p1p1p1p1;p1p1p1p1=p2p2p2p2;p2p2p2p2=p p p p;printf(printf(printf(printf(a=%d,b=%dna=%d,b=%dna=%d,b=%dna=%d,b=%dn,a,b);,a,b);,a,b);,a,b);printf(printf(printf(printf(max=%d,min=%dnmax=%d,min=%dnmax=%d,min=%dnmax=%d,min=%dn,*p1p1p1p1,*p2p2p2p2););););a ab bp1p1p2p2p p6 68 8a=6,b=8a=6,b=8max=8,min=6max=8,min=68.1 指针和指针变量指针和指针变量【例【例8.1】输入】输入a、b两个整数,两个整数,使用指针变量按大小顺序输出使用指针变量按大小顺序输出这两个整数。这两个整数。2021/9/279方法方法方法方法2 2 2 2:利用指针变量直接改变目标变量的值:利用指针变量直接改变目标变量的值:利用指针变量直接改变目标变量的值:利用指针变量直接改变目标变量的值求解。求解。求解。求解。main()main()main()main()int a,b,t,int a,b,t,int a,b,t,int a,b,t,*p1p1p1p1,*p2p2p2p2;p1p1p1p1=&a;a;a;a;p2p2p2p2=&b;b;b;b;scanf(scanf(scanf(scanf(%d%d%d%d%d%d%d%d,p1p1p1p1,p2p2p2p2););););if(if(if(if(*p1p1p1p1 p1、p2=p1。指针与一个整型数据进行比较是没有意指针与一个整型数据进行比较是没有意义的义的。不同类型指针变量之间比较是非法的不同类型指针变量之间比较是非法的。NULL可以与任何类型指针进行可以与任何类型指针进行=、!=的关系运算,用于判断指针是否为空指针的关系运算,用于判断指针是否为空指针。2021/9/2712 数组名是该数组的指针数组名是该数组的指针数组名是该数组的指针数组名是该数组的指针 a a a a是是是是数组的首地址(即数组的首地址(即数组的首地址(即数组的首地址(即a0a0a0a0的地址),是一的地址),是一的地址),是一的地址),是一个指针常量。个指针常量。个指针常量。个指针常量。a=&a0,a+1=&a1,a+9=&a9a=&a0,a+1=&a1,a+9=&a9a=&a0,a+1=&a1,a+9=&a9a=&a0,a+1=&a1,a+9=&a9 数组元素的下标表示法:数组元素的下标表示法:数组元素的下标表示法:数组元素的下标表示法:a a a a 0 0 0 0 ,a,a,a,a 1 1 1 1 ,a,a,a,a i i i i ,a,a,a,a 9 9 9 9 数组元素的指针表示法:数组元素的指针表示法:数组元素的指针表示法:数组元素的指针表示法:*(a+0),(a+0),(a+0),(a+0),*(a+1),(a+1),(a+1),(a+1),*(a+i),(a+i),(a+i),(a+i),*(a+9)(a+9)(a+9)(a+9)8.2 指针与数组指针与数组8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针1.1.一维数组的指针一维数组的指针一维数组的指针一维数组的指针 例如:例如:例如:例如:int a10,*p;int a10,*p;int a10,*p;int a10,*p;a0a0a9a9p p p pa a2021/9/2713 当当当当p p p p指向指向指向指向a0a0a0a0时,用时,用时,用时,用p p p p表示数组元素表示数组元素表示数组元素表示数组元素 下标法:下标法:下标法:下标法:p0,p1,p0,p1,p0,p1,p0,p1,pi,p9,pi,p9,pi,p9,pi,p9 指针法:指针法:指针法:指针法:*(p+0),(p+0),(p+0),(p+0),*(p+1),(p+1),(p+1),(p+1),*(p+i),(p+i),(p+i),(p+i),*(p+9)(p+9)(p+9)(p+9)a0a0a9a9p p p p8.2 指针与数组指针与数组8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针1.1.一维数组的指针一维数组的指针一维数组的指针一维数组的指针 指向一维数组元素的指针变量指向一维数组元素的指针变量指向一维数组元素的指针变量指向一维数组元素的指针变量 由于数组元素也是一个内存变量,所由于数组元素也是一个内存变量,所由于数组元素也是一个内存变量,所由于数组元素也是一个内存变量,所以此类指针变量的定义和使用与指向变量以此类指针变量的定义和使用与指向变量以此类指针变量的定义和使用与指向变量以此类指针变量的定义和使用与指向变量的指针变量相同。例如:的指针变量相同。例如:的指针变量相同。例如:的指针变量相同。例如:int a10,*p;int a10,*p;int a10,*p;int a10,*p;p=a;p=a;p=a;p=a;(或或或或 p=&a0;p=&a0;p=&a0;p=&a0;)a a2021/9/2714a a00a a99p p p pa a【例【例【例【例8.38.3】用指】用指】用指】用指针针针针法法法法输输输输出数出数出数出数组组组组元素。元素。元素。元素。main()main()int a10,i,*p;int a10,i,*p;for(i=0;i10;i+)for(i=0;i10;i+)scanf(%d,a+i);scanf(%d,a+i);for(i=0;i10;i+)for(i=0;i10;i+)printf(%4d,*(a+i);printf(%4d,*(a+i);printf(n);printf(n);for(p=a,i=0;i10;i+)for(p=a,i=0;i10;i+)printf(%4d,*(p+i);printf(%4d,*(p+i);printf(n);printf(n);8.2 指针与数组指针与数组8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针1.1.一维数组的指针一维数组的指针一维数组的指针一维数组的指针 12345678910 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 102021/9/2715a a00a a99p p p pa a【例【例【例【例8.38.3】用指】用指】用指】用指针针针针法法法法输输输输出数出数出数出数组组组组元素。元素。元素。元素。main()main()int a10,i,*p;int a10,i,*p;for(p=a;pa+10;p+)for(p=a;pa+10;p+)scanf(%d,p);scanf(%d,p);for(p=a;pa+10;p+)for(p=a;pa+10;p+)printf(%d,*p);printf(%d,*p);printf(n);printf(n);8.2 指针与数组指针与数组8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针1.1.一维数组的指针一维数组的指针一维数组的指针一维数组的指针 102021/9/2716a0a0a9a9p p p pa1a1 .1 12 23 34 45 56 67 78 89 91010a a a a 数组名数组名数组名数组名是地址,指向数组的是地址,指向数组的是地址,指向数组的是地址,指向数组的指针变量指针变量指针变量指针变量存放的也是地址。存放的也是地址。存放的也是地址。存放的也是地址。通过指针变量也可以引用数组元素。通过指针变量也可以引用数组元素。通过指针变量也可以引用数组元素。通过指针变量也可以引用数组元素。p p p p =&a0&a0&a0&a0 等效于等效于等效于等效于 p p p p =a a a a。数组名数组名数组名数组名和指向数组的和指向数组的和指向数组的和指向数组的指针变量指针变量指针变量指针变量的区别:的区别:的区别:的区别:指针变量指针变量指针变量指针变量p p p p是是是是变量变量变量变量可以赋值可以赋值可以赋值可以赋值,数组名数组名数组名数组名a a a a是地址是地址是地址是地址常量常量常量常量不能赋值。不能赋值。不能赋值。不能赋值。8.2 指针与数组指针与数组8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针用指针变量引用数组元素,用指针变量引用数组元素,用指针变量引用数组元素,用指针变量引用数组元素,必须关注其当前值。例如:必须关注其当前值。例如:必须关注其当前值。例如:必须关注其当前值。例如:p p p p=p p p p+3+3+3+3*(p-1)*(p-1)*(p-1)*(p-1)、p-1p-1p-1p-1等价于等价于等价于等价于a2a2a2a22021/9/2717【例例例例8.48.4】输输输输入五个整数,使用指入五个整数,使用指入五个整数,使用指入五个整数,使用指针变针变针变针变量将量将量将量将这这这这五个数五个数五个数五个数 按从小到大排序后按从小到大排序后按从小到大排序后按从小到大排序后输输输输出。出。出。出。main()main()int a5,*pp,*p,*q,t;int a5,*pp,*p,*q,t;for(p=a;pa+5;p+)for(p=a;pa+5;p+)scanf(%d,p);scanf(%d,p);for(p=a;pa+4;p+)for(p=a;pa+4;p+)pp=p;pp=p;for(q=p+1;qa+5;q+)for(q=p+1;q*q)pp=q;if(*pp*q)pp=q;if(pp!=p)if(pp!=p)t=*p;*p=*pp;*pp=t;t=*p;*p=*pp;*pp=t;for(p=a;pa+5;p+)for(p=a;pa+5;p+)printf(%d,*p);printf(%d,*p);printf(n);printf(n);8.2 指针与数组指针与数组 输入输入a数组数组 for(p=a;pa+4;p+)pp=p for(q=p+1;q*q F pp=q T pp!=p F *pp*p 输出输出a数组数组图图8.9 选择法排序选择法排序N-S图图2021/9/27180 0101020201 1111121212 2121222223 313132323a 二维数组的地址二维数组的地址二维数组的地址二维数组的地址 例如:例如:例如:例如:i i i int nt nt nt a a a a33334444;二维数组名二维数组名二维数组名二维数组名a a a a是数组的是数组的是数组的是数组的首地址首地址首地址首地址。二维数组二维数组二维数组二维数组a a a a包含三个行元素:包含三个行元素:包含三个行元素:包含三个行元素:a a a a0000、a a a a1111、a a a a2222 。a a00a a11a a22a三个行元素的地址分别是:三个行元素的地址分别是:三个行元素的地址分别是:三个行元素的地址分别是:a a a a、a+1a+1a+1a+1、a+2a+2a+2a+2。而而而而a a a a0000、a a a a1111、a a a a2222也是地址量,是一维数组名,也是地址量,是一维数组名,也是地址量,是一维数组名,也是地址量,是一维数组名,即即即即*(a+0)a+0)a+0)a+0)、*(a+1)(a+1)(a+1)(a+1)、*(a+2)(a+2)(a+2)(a+2)是一维数组首个元素地址。是一维数组首个元素地址。是一维数组首个元素地址。是一维数组首个元素地址。8.2 指针与数组指针与数组 8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针2.2.二维数组的指针二维数组的指针二维数组的指针二维数组的指针 a+1a+22021/9/2719 二维数组元素的地址二维数组元素的地址二维数组元素的地址二维数组元素的地址 a a a a0000、a a a a1111、a a a a2222是一维数组名,是一维数组名,是一维数组名,是一维数组名,所以所以所以所以a a a aiiii+j+j+j+j是是是是数组元素的地址。数组元素的地址。数组元素的地址。数组元素的地址。数组元素数组元素数组元素数组元素a a a aiiiijjjj的地址可以表示为下列形式:的地址可以表示为下列形式:的地址可以表示为下列形式:的地址可以表示为下列形式:&a a a aiiiijjjj、a a a aiiii+j+j+j+j 、*(a a a a+i i i i)+j j j j0 0101020201 1111121212 2121222223 313132323a0数组数组a1数组数组a2数组数组8.2 指针与数组指针与数组 8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针2.2.二维数组的指针二维数组的指针二维数组的指针二维数组的指针 a2a2+1+1 a2 a2+2+2 a2 a2+3+3a0a0+1+1 a0 a0+2+2 a0 a0+3+32021/9/2720 二维数组元素的表示法二维数组元素的表示法二维数组元素的表示法二维数组元素的表示法 数组元素可用下列形式表示:数组元素可用下列形式表示:数组元素可用下列形式表示:数组元素可用下列形式表示:a a a aiiiijjjj、*(a a a aiiii+j+j+j+j)、*(*(a a a a+i i i i)+j j j j)8.2 指针与数组指针与数组 8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针2.2.二维数组的指针二维数组的指针二维数组的指针二维数组的指针 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。0 0101020201 1111121212 2121222223 313132323a a00a a11a a22a2021/9/2721 指向二维数组元素的指针变量指向二维数组元素的指针变量指向二维数组元素的指针变量指向二维数组元素的指针变量8.2 指针与数组指针与数组 8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针2.2.二维数组的指针二维数组的指针二维数组的指针二维数组的指针 【例【例【例【例8.58.5】用指向数】用指向数】用指向数】用指向数组组组组元素的指元素的指元素的指元素的指针变针变针变针变量量量量输输输输出数出数出数出数组组组组元素。元素。元素。元素。main()main()int a34=0,1,2,3,10,11,12,13,20,21,22,23,i,j,*p;int a34=0,1,2,3,10,11,12,13,20,21,22,23,i,j,*p;for(p=a0,i=0;i 3;i+)for(p=a0,i=0;i 3;i+)for(j=0;j 4;j+)for(j=0;j 4;j+)printf(%4d,*(p+i*4+j);/*printf(%4d,*(p+i*4+j);/*元素的相元素的相元素的相元素的相对对对对位置位置位置位置为为为为i*4+j*/i*4+j*/printf(n);printf(n);这种指针变量的定义及使用与指向一维数组元素的这种指针变量的定义及使用与指向一维数组元素的这种指针变量的定义及使用与指向一维数组元素的这种指针变量的定义及使用与指向一维数组元素的指针变量是相同的,用它存放二维数组元素的地址。指针变量是相同的,用它存放二维数组元素的地址。指针变量是相同的,用它存放二维数组元素的地址。指针变量是相同的,用它存放二维数组元素的地址。0 0101020201 1111121212 2121222223 313132323ap p p p2021/9/2722 指向一维数组的指针变量指向一维数组的指针变量指向一维数组的指针变量指向一维数组的指针变量 指向一维数组指针变量的定义形式:指向一维数组指针变量的定义形式:指向一维数组指针变量的定义形式:指向一维数组指针变量的定义形式:数据类型标识符数据类型标识符数据类型标识符数据类型标识符 (*变量名变量名变量名变量名)元素个数元素个数元素个数元素个数 8.2 指针与数组指针与数组 8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针2.2.二维数组的指针二维数组的指针二维数组的指针二维数组的指针 “*”表示其后的表示其后的表示其后的表示其后的变变变变量名量名量名量名为为为为指指指指针类针类针类针类型,型,型,型,元素个数元素个数元素个数元素个数表示表示表示表示目目目目标变标变标变标变量是一量是一量是一量是一维维维维数数数数组组组组,并,并,并,并说说说说明一明一明一明一维维维维数数数数组组组组元素的个数。由于元素的个数。由于元素的个数。由于元素的个数。由于“*”比比比比“”的运算的运算的运算的运算级别级别级别级别低,低,低,低,“*变变变变量名量名量名量名”作作作作为为为为一个一个一个一个说说说说明部明部明部明部分,两分,两分,两分,两边边边边必必必必须须须须加括号。加括号。加括号。加括号。“数据数据数据数据类类类类型型型型标识标识标识标识符符符符”是定是定是定是定义义义义一一一一维维维维数数数数组组组组元素的元素的元素的元素的类类类类型。型。型。型。2021/9/2723【例【例【例【例8.68.6】用指向一】用指向一】用指向一】用指向一维维维维数数数数组组组组的指的指的指的指针变针变针变针变量量量量输输输输出数出数出数出数组组组组元素。元素。元素。元素。main()main()int a34=0,1,2,3,10,11,12,13,20,21,22,23;int a34=0,1,2,3,10,11,12,13,20,21,22,23;int(*lp)4,i,j;int(*lp)4,i,j;for(lp=a,i=0;i3;i+)for(lp=a,i=0;i3;i+)for(j=0;j4;j+)for(j=0;j4;j+)printf(%4d,*(*(lp+i)+j);printf(%4d,*(*(lp+i)+j);printf(n);printf(n);8.2 指针与数组指针与数组 8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针2.2.二维数组的指针二维数组的指针二维数组的指针二维数组的指针 0 0101020201 1111121212 2121222223 313132323alplp+1lp+2 0 1 2 3 10 11 12 13 20 21 22 232021/9/2724【例【例【例【例8.68.6】用指向一】用指向一】用指向一】用指向一维维维维数数数数组组组组的指的指的指的指针变针变针变针变量量量量输输输输出数出数出数出数组组组组元素。元素。元素。元素。main()main()int a 4=0,1,2,3,10,11,12,13,20,21,22,23;int a 4=0,1,2,3,10,11,12,13,20,21,22,23;int(*lp)4,j;int(*lp)4,j;for(lp=a;lpa+3;lp+)for(lp=a;lpa+3;lp+)for(j=0;j4;j+)for(j=0;j4;j+)printf(%4d,*(*lp+j);printf(%4d,*(*lp+j);printf(n);printf(n);8.2 指针与数组指针与数组 8.2.1 8.2.1 指向数组的指针指向数组的指针指向数组的指针指向数组的指针2.2.二维数组的指针二维数组的指针二维数组的指针二维数组的指针 0 0101020201 1111121212 2121222223 313132323alplplplp 0 1 2 3 10 11 12 13 20 21 22 23 2021/9/2725【例【例【例【例8.78.7】通过初始化使指针指向一个字符串。】通过初始化使指针指向一个字符串。】通过初始化使指针指向一个字符串。】通过初始化使指针指向一个字符串。main()main()char str1=Good morning!;char str1=Good morning!;char*str2=Good night!;char*str2=Good night!;printf(%sn,str1);printf(%sn,str1);printf(%sn,str2);printf(%sn,str2);8.2 指针与数组指针与数组 8.2.2 8.2.2 指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量1.1.指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量的定义及初始化的定义及初始化的定义及初始化的定义及初始化 字符串的两种表示方式:字符串的两种表示方式:字符数组表示方式,字符串存放在一维数组中,字符数组表示方式,字符串存放在一维数组中,引用时用数组名。引用时用数组名。字符指针变量表示方式,字符指针变量存放字字符指针变量表示方式,字符指针变量存放字符串的首地址,引用时用指针变量名。符串的首地址,引用时用指针变量名。Good morning!Good night!2021/9/2726【例例例例8.88.8】通通通通过过过过赋赋赋赋值值值值运运运运算算算算使使使使字字字字符符符符指指指指针针针针变变变变量量量量指指指指向向向向一一一一个字符串。个字符串。个字符串。个字符串。#includeinclude main()main()char c80,*str;char c80,*str;strcpy(c,How are you?);strcpy(c,How are you?);str=Fine,thanks.;str=Fine,thanks.;printf(%sn%sn,c,str);printf(%sn%sn,c,str);8.2 指针与数组指针与数组 8.2.2 8.2.2 指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量2.2.字符串的赋值运算字符串的赋值运算字符串的赋值运算字符串的赋值运算 将一个字符串赋给一个字符数组只能使用将一个字符串赋给一个字符数组只能使用strcpy函数函数 将字符串常量的首地址赋给指针变量,可使用赋值运将字符串常量的首地址赋给指针变量,可使用赋值运算符算符“=”How are you?Fine,thanks.2021/9/2727【例【例【例【例8.98.9】利用指针变量输入输出字符串。】利用指针变量输入输出字符串。】利用指针变量输入输出字符串。】利用指针变量输入输出字符串。#includeinclude main()main()char c80,*str;char c80,*str;str=c;str=c;gets(str);gets(str);puts(str);puts(str);8.2 指针与数组指针与数组 8.2.2 8.2.2 指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量3.3.字符串的输入输出字符串的输入输出字符串的输入输出字符串的输入输出 使用字符串输入输出函数使用字符串输入输出函数gets和和puts;在在scanf和和printf函数中使用函数中使用%s格式实现。格式实现。输入字符串时,函数参数:数组名、存有数组名的输入字符串时,函数参数:数组名、存有数组名的指针变量;指针变量;输出字符串时,函数参数:数组名、存有字符串首输出字符串时,函数参数:数组名、存有字符串首地址的指针变量。地址的指针变量。I love China!I love China!2021/9/2728 【例例例例8.118.11】已知字符串】已知字符串】已知字符串】已知字符串strstr,从中截取一子串。要求从中截取一子串。要求从中截取一子串。要求从中截取一子串。要求该该该该子串是从子串是从子串是从子串是从strstr的第的第的第的第mm个字符开始,由个字符开始,由个字符开始,由个字符开始,由n n个字符个字符个字符个字符组组组组成。成。成。成。思路:思路:思路:思路:定定定定义义义义字符数字符数字符数字符数组组组组c c 存放子串,字符指存放子串,字符指存放子串,字符指存放子串,字符指针变针变针变针变量量量量p p 用于复制用于复制用于复制用于复制子串,利用循子串,利用循子串,利用循子串,利用循环语环语环语环语句从字符串句从字符串句从字符串句从字符串strstr截取截取截取截取n n个字符。个字符。个字符。个字符。考考考考虑虑虑虑到几种特殊情况:到几种特殊情况:到几种特殊情况:到几种特殊情况:mm位置后的字符数有可能不足位置后的字符数有可能不足位置后的字符数有可能不足位置后的字符数有可能不足n n个,所以在循个,所以在循个,所以在循个,所以在循环读环读环读环读取字符取字符取字符取字符时时时时,若若若若读读读读到到到到 0 0 停止截取,利用停止截取,利用停止截取,利用停止截取,利用breakbreak语语语语句跳出循句跳出循句跳出循句跳出循环环环环。输输输输入的截取位置入的截取位置入的截取位置入的截取位置mm大于字符串的大于字符串的大于字符串的大于字符串的长长长长度,度,度,度,则则则则子串子串子串子串为为为为空。空。空。空。要求要求要求要求输输输输入的截取位置和字符个数均大于入的截取位置和字符个数均大于入的截取位置和字符个数均大于入的截取位置和字符个数均大于0 0,否,否,否,否则则则则子串子串子串子串为为为为空。空。空。空。8.2 指针与数组指针与数组 8.2.2 8.2.2 指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量指向字符串的指针变量2021/9/2729main()main()char c80,*p,*str=This is a string.;char c80,*p,*str=This is a string.;int i,m,n;int i,m,n;printf(m,n=);printf(m,n=);scanf(%d,%d,&m,&n);scanf(%d,%d,&m,&n);if(mstrlen(str)|n=0|mstrlen(str)|n=0|m=0)printf(NULLn);printf(NULLn);else else for(p=str+m-1,i=0;in;i+)for(p=str+m-1,i=0;i=0&week=0&weekb)swap(&a,&b);if(ab)swap(&a,&b);if(ac)swap(&a,&c);if(ac)swap(&a,&c);if(bc)swap(&b,&c);if(bc)swap(&b,&c);printf(%d,%d,%dn,a,b,c);printf(%d,%d,%dn,a,b,c);7 5 97 5 95 5,7,9,7,97a a5b b9c c&a a

    注意事项

    本文(中国科学技术大学培训中心.ppt)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开