中国科学技术大学培训中心.ppt
《中国科学技术大学培训中心.ppt》由会员分享,可在线阅读,更多相关《中国科学技术大学培训中心.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第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(
2、)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()m
3、ain()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直接将整数直接将整数直接将整数直接将整
4、数 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 语言语言语言语言还提供了对还
5、提供了对还提供了对还提供了对内存单元的内存单元的内存单元的内存单元的“间接存取间接存取间接存取间接存取”方式方式方式方式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)存放存放存放存放到变量到变量到变量到
6、变量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.
7、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;2000200020002000200120012001200120022002200220022003200320032003200420042
8、004200420052005200520052006200620062006200720072007200720082008200820082009200920092009a 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=
9、&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);间接存取运算间接存取运算间接存取运算间接存取运算20002000200020002001200120012001200220022002200220032003200
10、32003200420042004200420052005200520052006200620062006200720072007200720082008200820082009200920092009a 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
11、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(sc
12、anf(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
13、=%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()ma
14、in()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可以与任何类型指针进行可以与任
15、何类型指针进行=、!=的关系运算,用于判断指针是否为空指针的关系运算,用于判断指针是否为空指针。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 数组元素的下标表示法:
16、数组元素的下标表示法:数组元素的下标表示法:数组元素的下标表示法: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.一维
17、数组的指针一维数组的指针一维数组的指针一维数组的指针 例如:例如:例如:例如: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
18、),(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.一维数组的指针一维数组的指针一维数组的指针一维数组的指针 指向一维数组元素的指针变量指向一维数组元素的指针变量指向一维数组元素的指针变量指向一维数组元素的指针变量 由于数组元素也是一个内存变量,所由于数组元素也是一个内存变量,所由于数组元素也是一个内存变量,所由于数组元素也是一个内存变量,所以此类指针变量的定义和使用与指向变量以此类
19、指针变量的定义和使用与指向变量以此类指针变量的定义和使用与指向变量以此类指针变量的定义和使用与指向变量的指针变量相同。例如:的指针变量相同。例如:的指针变量相同。例如:的指针变量相同。例如: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 a1
20、0,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 指向数组的指针指向数组的指针指向
21、数组的指针指向数组的指针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
22、;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 数组名数组名数组名数组名是地址,指向数组的是地址,指向数组的是地址,指向数组的是地址,指向数组的指针变量指针变量指针变量指针变量存放的也是地址
23、。存放的也是地址。存放的也是地址。存放的也是地址。通过指针变量也可以引用数组元素。通过指针变量也可以引用数组元素。通过指针变量也可以引用数组元素。通过指针变量也可以引用数组元素。p p p p =&a0&a0&a0&a0 等效于等效于等效于等效于 p p p p =a a a a。数组名数组名数组名数组名和指向数组的和指向数组的和指向数组的和指向数组的指针变量指针变量指针变量指针变量的区别:的区别:的区别:的区别:指针变量指针变量指针变量指针变量p p p p是是是是变量变量变量变量可以赋值可以赋值可以赋值可以赋值,数组名数组名数组名数组名a a a a是地址是地址是地址是地址常量常量常量常量
24、不能赋值。不能赋值。不能赋值。不能赋值。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】输输输输入五个整数,使用指入五个整数,使用指入五个整数
25、,使用指入五个整数,使用指针变针变针变针变量将量将量将量将这这这这五个数五个数五个数五个数 按从小到大排序后按从小到大排序后按从小到大排序后按从小到大排序后输输输输出。出。出。出。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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国科学技术大学 培训中心
限制150内