第二章2先进制造系统

上传人:桔**** 文档编号:568809535 上传时间:2024-07-27 格式:PPT 页数:61 大小:2.64MB
返回 下载 相关 举报
第二章2先进制造系统_第1页
第1页 / 共61页
第二章2先进制造系统_第2页
第2页 / 共61页
第二章2先进制造系统_第3页
第3页 / 共61页
第二章2先进制造系统_第4页
第4页 / 共61页
第二章2先进制造系统_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《第二章2先进制造系统》由会员分享,可在线阅读,更多相关《第二章2先进制造系统(61页珍藏版)》请在金锄头文库上搜索。

1、1第第8 8章章 指指 针针C C 语言程序设计语言程序设计北京科技大学北京科技大学 计算机系计算机系2024/7/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章章 指针指针2024/7/2738.1 指针和指针变量指针和指针变量 main() main() main() main()float x;float x;float x;float x; int y; int y; int y;

2、int y; 8.1.1 8.1.1 指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念指针和指针变量的概念变量的两个物理意义变量的两个物理意义 200020002000200020012001200120012002200220022002200320032003200320042004200420042005200520052005x x x xy y y y变量的内容变量的内容变量的地址变量的地址2024/7/2748.1 指针和指针变量指针和指针变量 main() main() main() main()int a,b,c;int a,b,c;int a,b,c;int a,

3、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 存入变量存入变量 a a 3 3直接将整数直接将整数直接将整数直接将整数 3

4、3 3 3 存入变量存入变量存入变量存入变量 b b b b8 8直接直接将变量将变量 a a、b b 的值取出,相加的值取出,相加后存入变量后存入变量 c c 利用变量名存取数据的方式利用变量名存取数据的方式利用变量名存取数据的方式利用变量名存取数据的方式称为称为称为称为“ “直接存取直接存取直接存取直接存取” ”方式。方式。方式。方式。2024/7/275 C C 语言语言语言语言还提供了对还提供了对还提供了对还提供了对内存单元的内存单元的内存单元的内存单元的“ “间接存取间接存取间接存取间接存取” ”方式方式方式方式p p200020002000200020012001200120012

5、00220022002200220032003200320032004200420042004200520052005200520062006200620062007200720072007a 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

6、 c称为指针变量称为指针变量称为指针变量称为指针变量p p p p的的的的目标变量目标变量目标变量目标变量。p p20042004c cp=&c8 main(main(main(main( ) ) ) )int a=5,b=3,c,int a=5,b=3,c,int a=5,b=3,c,int a=5,b=3,c,*p*p*p*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 指针和指针变量的概念指针和指针变量的概

7、念指针和指针变量的概念指针和指针变量的概念 变量的地址称为变量的指针变量的地址称为变量的指针变量的地址称为变量的指针变量的地址称为变量的指针 存放地址的变量称为指针变量存放地址的变量称为指针变量存放地址的变量称为指针变量存放地址的变量称为指针变量8.1 指针和指针变量指针和指针变量l指指针变量的定量的定义形式形式 数据数据类型型 *指指针变量名;量名;数据类型:指针变量的目标变量的类型数据类型:指针变量的目标变量的类型一个指针变量分配一个指针变量分配2Byte的内存空间的内存空间l l例:例:float x, *p1, *p2; int y, *p3; char name20, *cp;202

8、4/7/2768.1.2 8.1.2 指针变量的定义指针变量的定义指针变量的定义指针变量的定义2024/7/277 main()main() int a,*p int a,*p=&a=&a; ; float x,*q float x,*q=&x=&x; ; 2000200020002000200120012001200120022002200220022003200320032003200420042004200420052005200520052006200620062006200720072007200720082008200820082009200920092009a a a ap p

9、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; ; ; ; 指针变量定义的形式指针变量定义的形式指针变量定义的形式指针变量定义的形式指针变量

10、初始化指针变量初始化指针变量初始化指针变量初始化2024/7/278 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); 间接存取运算间接存取运算间接存取运算间接存取运算20002000200020002001200120012001200220022002200220032003200320032004200420042004200520052005200520062006200620

11、06200720072007200720082008200820082009200920092009a a a ap p p px x x xq q q q20048.1 指针和指针变量指针和指针变量8.1.3 8.1.3 指针的基本运算指针的基本运算指针的基本运算指针的基本运算200052024/7/2792000200020002000200120012001200120022002200220022003200320032003200420042004200420052005200520052006200620062006200720072007200720082008200820082

12、009200920092009a 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; ; ; ; 赋值运算赋值

13、运算赋值运算赋值运算“=”“=”两侧类型一致;两侧类型一致;NULLNULL可赋给任何可赋给任何类型的指针变量类型的指针变量p = 2000;2024/7/2710方法方法方法方法1 1 1 1:目标变量值不变,改变指针变量的:目标变量值不变,改变指针变量的:目标变量值不变,改变指针变量的:目标变量值不变,改变指针变量的指向求解。指向求解。指向求解。指向求解。 main(main(main(main( ) ) ) ) int a,b, int a,b, int a,b, int a,b,* * * *p1p1p1p1, , , ,* * * *p2p2p2p2, , , ,* * * *p p

14、 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; pri

15、ntf( 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);););); 【例【例8.1】输入】输入a、b两个整数,两个整数,使用指针变量按大小顺序输出使用指针变量按大小顺序输出这两个整数。这两个整数。 a ab

16、bp1p1p2p2p p6 68 8a=6,b=8a=6,b=8max=8,min=6max=8,min=68.1.3 指针的基本运算指针的基本运算2024/7/2711方法方法方法方法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; ; ; ; p1

17、p1p1p1= = = =& & & &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可以与任何类型指针进行可以与任何类型指针进行=、!=的关系运算,用于

18、判断指针是否为空指针的关系运算,用于判断指针是否为空指针 。8.1.3 指针的基本运算指针的基本运算2024/7/2715 数组名是该数组的指针数组名是该数组的指针数组名是该数组的指针数组名是该数组的指针 a a a a是是是是数组的首地址(即数组的首地址(即数组的首地址(即数组的首地址(即a0a0a0a0的地址),是一的地址),是一的地址),是一的地址),是一个指针常量。个指针常量。个指针常量。个指针常量。 a = &a0,a+1 = &a1, a = &a0,a+1 = &a1, a = &a0,a+1 = &a1, a = &a0,a+1 = &a1, ,a+9 = &a9 ,a+9 =

19、 &a9 ,a+9 = &a9 ,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+

20、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 a2024/7/2716 当当当当p p p p指向指向指向指向a0a0a0a0时,用时,用时,用时,用p p p p表示数组元素表示数组元素表示数组元素表示数组元素 下标法:下标法

21、:下标法:下标法: p0,p1, p0,p1, p0,p1, p0,p1, ,pi, ,pi, ,pi, ,pi, ,p9 ,p9 ,p9 ,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 p1. 1. 一维数组的指针一维数组的指针一维数组的指针一维数组的指针 指向一维数组元素的指针变量指向一维数组元

22、素的指针变量指向一维数组元素的指针变量指向一维数组元素的指针变量 数组元素也是一个内存变量,此类指数组元素也是一个内存变量,此类指数组元素也是一个内存变量,此类指数组元素也是一个内存变量,此类指针变量的定义和使用与指向变量的指针变针变量的定义和使用与指向变量的指针变针变量的定义和使用与指向变量的指针变针变量的定义和使用与指向变量的指针变量相同。例如:量相同。例如:量相同。例如:量相同。例如: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

23、 = &a0; p = &a0;) ) ) ) a a8.2.1 指向数组的指针指向数组的指针2024/7/2717a 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, scanf(%d, a+ia+i); ); for (i=0; i10; i+) for (i=0; i10; i+) printf(%4d

24、, printf(%4d ,*(a+i)*(a+i); ); printf(n);printf(n); for ( for (p=ap=a,i=0; i10; i+),i=0; i10; i+) printf(%4d , printf(%4d ,*(p+i)*(p+i); ); printf(n);printf(n); 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 102024/7/2718a a00a a99p p p pa a

25、【例【例【例【例8.38.3】用指】用指】用指】用指针针法法法法输输出数出数出数出数组组元素。元素。元素。元素。main( ) int a10, i, *p; for (p=a; pa+10; p+) scanf(%d,p); for (p=a; pa+10; p+) printf(%d ,*p); printf(n); 1. 1. 一维数组的指针一维数组的指针一维数组的指针一维数组的指针 108.2.1 指向数组的指针指向数组的指针2024/7/2719 数组名数组名数组名数组名是地址,指向数组的是地址,指向数组的是地址,指向数组的是地址,指向数组的指针变量指针变量指针变量指针变量存放的存放

26、的存放的存放的也是地址。通过指针变量也可以引用数组元素。也是地址。通过指针变量也可以引用数组元素。也是地址。通过指针变量也可以引用数组元素。也是地址。通过指针变量也可以引用数组元素。 p p p p = &a0 = &a0 = &a0 = &a0 等效于等效于等效于等效于 p p p p = a = a = a = a。用指针变量引用数组元素,用指针变量引用数组元素,用指针变量引用数组元素,用指针变量引用数组元素,必须关注其当前值。例如:必须关注其当前值。例如:必须关注其当前值。例如:必须关注其当前值。例如: p p p p = = = = p p p p + 3+ 3+ 3+ 3*(p-1)

27、*(p-1)*(p-1)*(p-1)、p-1p-1p-1p-1等价于等价于等价于等价于a2a2a2a28.2.1 指向数组的指针指向数组的指针 a0a0a9a9p p p pa1a1a2a2a3a3 . . . . . . . .1 12 23 34 45 56 67 78 89 91010a a a a数组名数组名数组名数组名和指向数组的和指向数组的和指向数组的和指向数组的指针变量指针变量指针变量指针变量的区别:的区别:的区别:的区别:指针变量指针变量指针变量指针变量p p p p是是是是变量变量变量变量可以赋值可以赋值可以赋值可以赋值, , , ,数组名数组名数组名数组名a a a a是地

28、址是地址是地址是地址常量常量常量常量不能赋值。不能赋值。不能赋值。不能赋值。2024/7/2720【例例例例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; p

29、a+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); 输入输入a数组数组 for (p=a; pa+4; p+) pp=p for (q=p

30、+1; q*q F pp=q T pp!=p F *pp*p 输出输出a数组数组图图8.9 选择法排序选择法排序N-S图图8.2.1 指向数组的指针指向数组的指针p用于定位用于定位pp指向当前最小值指向当前最小值q将顺序指将顺序指向参加比较向参加比较的元素的元素最小值不在定位位置最小值不在定位位置2024/7/27210 0101020201 1111121212 2121222223 313132323a 二二二二维维数数数数组组的地址的地址的地址的地址 例如:例如:例如:例如:i i i int nt nt nt a a a a33334444; ; ; ; 二二二二维维数数数数组组名名名

31、名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也是地址量,是一维数组名,也是地址量,是一维数组名,也是地址量,是一维数组名

32、,也是地址量,是一维数组名,即即即即* * * *( ( ( (a+0)a+0)a+0)a+0)、* * * *(a+1)(a+1)(a+1)(a+1)、* * * *(a+2)(a+2)(a+2)(a+2)是一维数组首个元素地址。是一维数组首个元素地址。是一维数组首个元素地址。是一维数组首个元素地址。2. 2. 二维数组的指针二维数组的指针二维数组的指针二维数组的指针 a+1a+28.2.1 指向数组的指针指向数组的指针2024/7/2722 二二二二维维数数数数组组元素的地址元素的地址元素的地址元素的地址 a a a a0000、a a a a1111、a a a a2222是一是一是一是

33、一维维数数数数组组名,名,名,名,所以所以所以所以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 31

34、3132323a0数组数组a1数组数组a2数组数组a2a2+1+1 a2 a2+2+2 a2 a2+3+3a0a0+1+1 a0 a0+2+2 a0 a0+3+38.2.1 指向数组的指针指向数组的指针2. 2. 二维数组的指针二维数组的指针二维数组的指针二维数组的指针 2024/7/2723 二二二二维维数数数数组组元素的表示法元素的表示法元素的表示法元素的表示法 数数数数组组元素可用下列形式表示:元素可用下列形式表示:元素可用下列形式表示:元素可用下列形式表示: a a a aiiiijjjj、* * * *( ( ( (a a a aiiii+j+j+j+j) ) ) )、* * * *

35、( ( ( (* * * *( ( ( (a a a a+ + + +i i i i) ) ) )+ + + +j j j j) ) ) ) a a a a 是是是是二二二二维数组,根据维数组,根据维数组,根据维数组,根据C C C C的地址计算方法,的地址计算方法,的地址计算方法,的地址计算方法,a a a a经过经过经过经过两次两次两次两次 * * * * 操作才能访问到数组元素。所以操作才能访问到数组元素。所以操作才能访问到数组元素。所以操作才能访问到数组元素。所以 * * * * a a a a 是是是是 a a a a0000,* * * * * * * * a a a a 才才才才

36、是是是是 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 a22a8.2.1 指向数组的指针指向数组的指针2. 2. 二维数组的指针二维数组的指针二维数组的指针二维数组的指针 2024/7/2724 指向指向指向指向二二二二维维数数数数组组元素元素元素元素的指的指的指的指针变针变量量量量【例【例【例【例8.58.5】用指向数组

37、元素的指针变量输出数组元素。】用指向数组元素的指针变量输出数组元素。】用指向数组元素的指针变量输出数组元素。】用指向数组元素的指针变量输出数组元素。 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, printf(

38、%4d,*(p+i*4+j)*(p+i*4+j); /* ); /* 元素的相对位置为元素的相对位置为元素的相对位置为元素的相对位置为i*4+j */i*4+j */ printf(n); printf(n); 这种指针变量的定义及使用与指向一维数组元素的这种指针变量的定义及使用与指向一维数组元素的这种指针变量的定义及使用与指向一维数组元素的这种指针变量的定义及使用与指向一维数组元素的指针变量是相同的,用它存放二维数组元素的地址。指针变量是相同的,用它存放二维数组元素的地址。指针变量是相同的,用它存放二维数组元素的地址。指针变量是相同的,用它存放二维数组元素的地址。0 0101020201 1

39、111121212 2121222223 313132323ap p p p8.2.1 指向数组的指针指向数组的指针2. 2. 二维数组的指针二维数组的指针二维数组的指针二维数组的指针 2024/7/2725 指向指向指向指向一一一一维维数数数数组组的指的指的指的指针变针变量量量量 指向一指向一指向一指向一维维数数数数组组指指指指针变针变量的定量的定量的定量的定义义形式:形式:形式:形式: 数据数据数据数据类类型型型型标识标识符符符符 ( ( ( (* * * *变变量名量名量名量名)元素个数元素个数元素个数元素个数 pp * *表示其后的表示其后的表示其后的表示其后的变量名变量名变量名变量名

40、为指针类型为指针类型为指针类型为指针类型pp元素个数元素个数元素个数元素个数表示目标变量是一维数组,并说明一维数表示目标变量是一维数组,并说明一维数表示目标变量是一维数组,并说明一维数表示目标变量是一维数组,并说明一维数组元素的个数。组元素的个数。组元素的个数。组元素的个数。pp由于由于由于由于“ “* *” ”比比比比“ “ ” ”的运算级别低,的运算级别低,的运算级别低,的运算级别低,“ “* *变量名变量名变量名变量名” ”作作作作为一个说明部分,两边必须加括号。为一个说明部分,两边必须加括号。为一个说明部分,两边必须加括号。为一个说明部分,两边必须加括号。 pp“ “数据类型标识符数据

41、类型标识符数据类型标识符数据类型标识符” ”是定义一维数组元素的类型。是定义一维数组元素的类型。是定义一维数组元素的类型。是定义一维数组元素的类型。8.2.1 指向数组的指针指向数组的指针2. 2. 二维数组的指针二维数组的指针二维数组的指针二维数组的指针 2024/7/2726【例【例【例【例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,1

42、1,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, printf(%4d,*(*(lp+i)+j)*(*(lp+i)+j); ); printf(n); printf(n); 0 0101020201 1111121212 2121222223 313132323alplp+1lp+2 0 1 2 3 10 11 12 13 20 21 22

43、238.2.1 指向数组的指针指向数组的指针2. 2. 二维数组的指针二维数组的指针二维数组的指针二维数组的指针 2024/7/2727【例【例【例【例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 ( for (lp=alp=a; l

44、pa+3; ; lpa+3; lp+lp+) ) for (j=0; j4; j+) for (j=0; j4; j+) printf(%4d, printf(%4d,*(*lp+j)*(*lp+j); ); printf(n); printf(n); 0 0101020201 1111121212 2121222223 313132323alplplplp 0 1 2 3 10 11 12 13 20 21 22 23 8.2.1 指向数组的指针指向数组的指针2. 2. 二维数组的指针二维数组的指针二维数组的指针二维数组的指针 2024/7/2728【例【例【例【例8.78.7】通过初始化使

45、指针指向一个字符串。】通过初始化使指针指向一个字符串。】通过初始化使指针指向一个字符串。】通过初始化使指针指向一个字符串。 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 指向字符串的指针变量指向字符串的指针变量指向字符串

46、的指针变量指向字符串的指针变量1. 1. 指向字符串的指针变量的定义及初始化指向字符串的指针变量的定义及初始化指向字符串的指针变量的定义及初始化指向字符串的指针变量的定义及初始化字符串的两种表示方式:字符串的两种表示方式: 字符数组字符数组字符数组字符数组表示方式,字符串存放在一维数表示方式,字符串存放在一维数组中,用组中,用数组名数组名引用。引用。 字符指针变量字符指针变量字符指针变量字符指针变量表示方式,字符指针变量存表示方式,字符指针变量存放字符串的首地址,用放字符串的首地址,用指针变量名指针变量名引用。引用。Good morning!Good night!2024/7/2729【例例例

47、例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.2 指向字符串的指针

48、变量指向字符串的指针变量 2. 2. 字符串的赋值运算字符串的赋值运算字符串的赋值运算字符串的赋值运算 将一个字符串赋给一个字符数组只能使用将一个字符串赋给一个字符数组只能使用 strcpy函数函数 将字符串常量的首地址赋给指针变量,可将字符串常量的首地址赋给指针变量,可 使用赋值运算符使用赋值运算符“=” How are you ?Fine,thanks.2024/7/2730【例【例【例【例8.98.9】利用指针变量输入输出字符串。】利用指针变量输入输出字符串。】利用指针变量输入输出字符串。】利用指针变量输入输出字符串。 # #includeinclude main( ) main( )

49、char c80,*str; char c80,*str; str=c;str=c; gets(str); gets(str); puts( puts(strstr); ); 3. 3. 字符串的输入输出字符串的输入输出字符串的输入输出字符串的输入输出 使用字符串输入输出函数使用字符串输入输出函数gets和和puts; 在在scanf和和printf函数中使用函数中使用 %s格式实现。格式实现。 输入字符串时,函数参数:输入字符串时,函数参数:数组名数组名数组名数组名、存有数、存有数组名的组名的指针变量指针变量指针变量指针变量; 输出字符串时,函数参数:输出字符串时,函数参数:数组名数组名数组

50、名数组名、存有字、存有字符串首地址的符串首地址的指针变量指针变量指针变量指针变量。 I love China! I love China! 8.2.2 指向字符串的指针变量指向字符串的指针变量 2024/7/2731 【例例例例8.118.11】已知字符串】已知字符串】已知字符串】已知字符串strstr,从中截取一子串。要求从中截取一子串。要求从中截取一子串。要求从中截取一子串。要求该该子串是从子串是从子串是从子串是从strstr的第的第的第的第mm个字符开始,由个字符开始,由个字符开始,由个字符开始,由n n个字符个字符个字符个字符组组成。成。成。成。 思路:思路:思路:思路: 定定定定义义

51、字符数字符数字符数字符数组组c c c c 存放子串,字符指存放子串,字符指存放子串,字符指存放子串,字符指针变针变量量量量p p p p 用于用于用于用于复制子串,利用循复制子串,利用循复制子串,利用循复制子串,利用循环语环语句从字符串句从字符串句从字符串句从字符串strstrstrstr截取截取截取截取n n n n个字符。个字符。个字符。个字符。 考考考考虑虑到几种特殊情况:到几种特殊情况:到几种特殊情况:到几种特殊情况: mm位置后的字符数有可能不足位置后的字符数有可能不足位置后的字符数有可能不足位置后的字符数有可能不足n n个,所以在循个,所以在循个,所以在循个,所以在循环读环读取字

52、符取字符取字符取字符时时,若若若若读读到到到到 0 0 停止截取,利用停止截取,利用停止截取,利用停止截取,利用breakbreak语语句跳出循句跳出循句跳出循句跳出循环环。 输输入的截取位置入的截取位置入的截取位置入的截取位置mm大于字符串的大于字符串的大于字符串的大于字符串的长长度,度,度,度,则则子串子串子串子串为为空。空。空。空。 要求要求要求要求输输入的截取位置和字符个数均大于入的截取位置和字符个数均大于入的截取位置和字符个数均大于入的截取位置和字符个数均大于0 0,否,否,否,否则则子串子串子串子串为为空。空。空。空。8.2.2 指向字符串的指针变量指向字符串的指针变量 2024/

53、7/2732main( )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;

54、 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 ax1x1&b bx2x2 主调函数与被调函数之间数据传递的方法:主调函数与被调函

55、数之间数据传递的方法:主调函数与被调函数之间数据传递的方法:主调函数与被调函数之间数据传递的方法: 实参与形参之间的数据传递;实参与形参之间的数据传递;实参与形参之间的数据传递;实参与形参之间的数据传递; 被调函数通过被调函数通过被调函数通过被调函数通过returnreturnreturnreturn语句把函数值返回到主调函语句把函数值返回到主调函语句把函数值返回到主调函语句把函数值返回到主调函数;数;数;数; 通过全局变量交换数据;通过全局变量交换数据;通过全局变量交换数据;通过全局变量交换数据; 利用指针型参数在主调函数和被调函数之间传递利用指针型参数在主调函数和被调函数之间传递利用指针型

56、参数在主调函数和被调函数之间传递利用指针型参数在主调函数和被调函数之间传递数据。数据。数据。数据。 7t t79 975 75 形参形参形参形参x1x1x1x1和和和和x2x2x2x2得到得到得到得到mainmainmainmain函数中函数中函数中函数中a a a a和和和和b b b b的地址,这样的地址,这样的地址,这样的地址,这样x1x1x1x1和和和和x2x2x2x2的目标的目标的目标的目标变量就是变量就是变量就是变量就是mainmainmainmain函数的变量函数的变量函数的变量函数的变量a a a a和和和和b b b b。在在在在swapswapswapswap函数中交换函数

57、中交换函数中交换函数中交换 * * * *x1x1x1x1和和和和 * * * *x2x2x2x2的的的的内容,就是交换内容,就是交换内容,就是交换内容,就是交换a a a a和和和和b b b b的内容,所的内容,所的内容,所的内容,所以当函数调用结束后,尽管以当函数调用结束后,尽管以当函数调用结束后,尽管以当函数调用结束后,尽管x1x1x1x1和和和和x2x2x2x2已经释放,但操作结果仍保留已经释放,但操作结果仍保留已经释放,但操作结果仍保留已经释放,但操作结果仍保留在在在在mainmainmainmain函数的变量函数的变量函数的变量函数的变量a a a a和和和和b b b b中,这

58、就中,这就中,这就中,这就是是是是通过指针形参指向域扩展到主通过指针形参指向域扩展到主通过指针形参指向域扩展到主通过指针形参指向域扩展到主调函数的方法,达到主调函数与调函数的方法,达到主调函数与调函数的方法,达到主调函数与调函数的方法,达到主调函数与被调函数间交换多个数据的目的被调函数间交换多个数据的目的被调函数间交换多个数据的目的被调函数间交换多个数据的目的。 2024/7/27408.3.1 指针变量作函数参数指针变量作函数参数2. 2. 数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数 一一一一维维数数数数组组的指的指的指的指针针作函数参数作函数参数作函数

59、参数作函数参数 例如被调函数例如被调函数例如被调函数例如被调函数abcabc的定义形式有以下三种:的定义形式有以下三种:的定义形式有以下三种:的定义形式有以下三种: void abc(int b10) void abc(int b10) void abc(int b ) void abc(int b ) void abc(int *b) void abc(int *b) 在主调函数有如下定义:在主调函数有如下定义:在主调函数有如下定义:在主调函数有如下定义: int a10,*p=a; int a10,*p=a; 则调用则调用则调用则调用abcabc函数时可用函数时可用函数时可用函数时可用 a

60、bc(a) abc(a) 或或或或 abc(p)abc(p) 当函数之间需要传递数组时,可以通过传当函数之间需要传递数组时,可以通过传当函数之间需要传递数组时,可以通过传当函数之间需要传递数组时,可以通过传递数组的首地址(即通过指针参数指向域的扩递数组的首地址(即通过指针参数指向域的扩递数组的首地址(即通过指针参数指向域的扩递数组的首地址(即通过指针参数指向域的扩展),完成存取主调函数中数组元素的操作。展),完成存取主调函数中数组元素的操作。展),完成存取主调函数中数组元素的操作。展),完成存取主调函数中数组元素的操作。2024/7/2741【例【例【例【例8.208.20】字符串复制函数。】

61、字符串复制函数。】字符串复制函数。】字符串复制函数。 void copystr(char void copystr(char * *t t, char , char * *s s) ) /* /* 字符指针变量字符指针变量字符指针变量字符指针变量t t和和和和s s作形参作形参作形参作形参 */ */ while (while (* *t t+=+=* *s s+)!=0); +)!=0); main( ) main( ) char char c c80,80,* *p p=I am a student.;=I am a student.; copystr( copystr(c c, , p

62、p); ); /* /* 数组名数组名数组名数组名c c和字符指针变量和字符指针变量和字符指针变量和字符指针变量p p作实参作实参作实参作实参 */ */ printf(%sn,c);printf(%sn,c); 8.3.1 指针变量作函数参数指针变量作函数参数 2. 2. 数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数 2024/7/2742 二维数组的指针作函数参数二维数组的指针作函数参数二维数组的指针作函数参数二维数组的指针作函数参数 8.3.1 指针变量作函数参数指针变量作函数参数 2. 2. 数组的指针作函数参数数组的指针作函数参数数组的指针作函数参

63、数数组的指针作函数参数 二维数组的二维数组的二维数组的二维数组的行指针行指针行指针行指针作函数参数作函数参数作函数参数作函数参数 例如被调函数例如被调函数例如被调函数例如被调函数abcabc的定义形式有以下三种:的定义形式有以下三种:的定义形式有以下三种:的定义形式有以下三种: void abc(int b24) void abc(int b24) void abc(int b 4) void abc(int b 4) void abc(int (*b)4) void abc(int (*b)4) 在主调函数有如下定义:在主调函数有如下定义:在主调函数有如下定义:在主调函数有如下定义: int

64、 a24, (*p)4=a; int a24, (*p)4=a; 则调用则调用则调用则调用abcabc函数时可用函数时可用函数时可用函数时可用 abc(a) abc(a) 或或或或 abc(p)abc(p) 由于指向二维数组的指针分为行指针由于指向二维数组的指针分为行指针和元素指针,所以他们作为函数参数的形和元素指针,所以他们作为函数参数的形式也不同。式也不同。2024/7/2743【例例例例8.228.22】用用用用函函函函数数数数输输入入入入输输出出出出整整整整型型型型二二二二维维数数数数组组,函函函函数数数数的的的的形参形参形参形参为为行指行指行指行指针针。 void inarr(int

65、 (*p1)4,int m) void inarr(int (*p1)4,int m) /* /* 可改写可改写可改写可改写为为void inarr(int p1 4,int m) */void inarr(int p1 4,int m) */ int i,j; int i,j; for (i=0; im; i+) for (i=0; im; i+) for (j=0; j4; j+) for (j=0; j4; j+) scanf(%d,*(p1+i)+j); scanf(%d,*(p1+i)+j); 8.3.1 指针变量作函数参数指针变量作函数参数 2. 2. 数组的指针作函数参数数组的指

66、针作函数参数数组的指针作函数参数数组的指针作函数参数 2024/7/2744void outarr(int (*p2)4,int m) void outarr(int (*p2)4,int m) /* /* 可改写为可改写为可改写为可改写为void outarr(int p234,int m) */void outarr(int p234,int m) */ int i,j; int i,j; for (i=0; im; i+) for (i=0; im; i+) for (j=0; j4; j+) for (j=0; j4; j+) printf(%6d,p2ij); printf(%6d,

67、p2ij); printf(n); printf(n); 8.3.1 指针变量作函数参数指针变量作函数参数 2. 2. 数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数 2024/7/2745main( )main( ) int a34,(*p)4; int a34,(*p)4; p=a; p=a; inarr(a,3); inarr(a,3); outarr(p,3); outarr(p,3); 8.3.1 指针变量作函数参数指针变量作函数参数 2. 2. 数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数 2024/7/2746

68、 二维数组的指针作函数参数二维数组的指针作函数参数二维数组的指针作函数参数二维数组的指针作函数参数 指向二指向二指向二指向二维维数数数数组组元素的指元素的指元素的指元素的指针针作函数参数作函数参数作函数参数作函数参数例如被调函数例如被调函数例如被调函数例如被调函数abcabc的定义形式如下:的定义形式如下:的定义形式如下:的定义形式如下: void abc(int *b) void abc(int *b) 在主调函数有如下定义:在主调函数有如下定义:在主调函数有如下定义:在主调函数有如下定义: int a24, *p=a0; int a24, *p=a0;则调用则调用则调用则调用abcabc函

69、数时可用函数时可用函数时可用函数时可用 abc(a0) abc(a0)、abc(&a00) abc(&a00) 或或或或 abc(p)abc(p)8.3.1 指针变量作函数参数指针变量作函数参数 2. 2. 数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数 指向二维数组元素的指针作函数参数指向二维数组元素的指针作函数参数时,是利用二维数组元素按行连续存储的时,是利用二维数组元素按行连续存储的特点,访问数组的每一个元素。特点,访问数组的每一个元素。被被调函数函数的形参必的形参必须定定义为指向二指向二维数数组元素的指元素的指针变量量。2024/7/2747【例例例例

70、8.238.23】用用用用函函函函数数数数输输入入入入输输出出出出整整整整型型型型二二二二维维数数数数组组,函函函函数数数数的的的的形参形参形参形参为为指向二指向二指向二指向二维维数数数数组组元素的指元素的指元素的指元素的指针针。 void inarr(int *p1, int m void inarr(int *p1, int m,int n)int n) int i,j; int i,j; for (i=0; im; i+) for (i=0; im; i+) for (j=0; jn; j+) for (j=0; jn; j+) scanf(%d,p1+n*i+j); scanf(%d,

71、p1+n*i+j); 8.3.1 指针变量作函数参数指针变量作函数参数 2. 2. 数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数数组的指针作函数参数 2024/7/2748void outarr(int *p1, int m, int n)void outarr(int *p1, int m, int n) int i,j; int i,j; for (i=0; im; i+) for (i=0; im; i+) for (j=0; jn; j+) for (j=0; jfile1 one two threeC:file1 one two threeC:file1 one tw

72、o threeC:file1 one two threeargv0argv0 f fi il le e1 1 0 0argv1argv1 o on n e e 0 0argv2argv2 t tww o o 0 0argv3argv3 t th h r re ee e 0 0argvargvargcargc4 48.3.2 带参数的主函数带参数的主函数 2024/7/2753【例【例【例【例8.248.24】显显示命令行参数程序。示命令行参数程序。示命令行参数程序。示命令行参数程序。 void main(int argc,char *argv ) void main(int argc,char

73、 *argv ) int i=0; int i=0; while (-argc0) while (-argc0) printf(%sn,argv+i); printf(%sn,argv+i); C: file1 one two three onetwothree8.3.2 带参数的主函数带参数的主函数 注意注意: : 命令行参数所传送的数据全部都是字符命令行参数所传送的数据全部都是字符串。即便传送的是数值,也是按字符串方式传送串。即便传送的是数值,也是按字符串方式传送给主函数。程序中使用这些参数时,还需要将数给主函数。程序中使用这些参数时,还需要将数字字符串转换成数值型数据。字字符串转换成数值

74、型数据。C语言标准库函数提语言标准库函数提供了一些相关的数据类型转换函数供了一些相关的数据类型转换函数 。2024/7/27548.3 指针与函数指针与函数 8.3.3 8.3.3 指针型函数指针型函数指针型函数指针型函数1. 1. 指针型函数的定义指针型函数的定义指针型函数的定义指针型函数的定义 指指指指针针型函数定型函数定型函数定型函数定义义的一般形式:的一般形式:的一般形式:的一般形式: 数据数据数据数据类类型型型型标识标识符符符符 * *函数名函数名函数名函数名(形式参数表形式参数表形式参数表形式参数表) 其其其其中中中中函函函函数数数数名名名名前前前前的的的的“ “* * * *”

75、”表表表表示示示示函函函函数数数数的的的的返返返返回回回回值值值值是是是是一一一一个个个个指指指指针针针针类类类类型型型型,“ “数数数数据据据据类类类类型型型型标标标标识识识识符符符符” ”是是是是指指指指针针针针所所所所指指指指向的目标变量的类型。向的目标变量的类型。向的目标变量的类型。向的目标变量的类型。 如果一个函数的返回值是指针,则称此函数如果一个函数的返回值是指针,则称此函数为指针型函数。为指针型函数。 2024/7/27558.3.3 指针型函数指针型函数 【例例例例8.268.26】编编编编制制制制一一一一个个个个函函函函数数数数,其其其其功功功功能能能能是是是是从从从从已已已

76、已知知知知字字字字符符符符串串串串中中中中指定位置指定位置指定位置指定位置s s开始截取一个长度为开始截取一个长度为开始截取一个长度为开始截取一个长度为lenlen的子串。的子串。的子串。的子串。思路:思路:思路:思路: 在在在在截截截截取取取取子子子子串串串串函函函函数数数数sutcutsutcut中中中中需需需需要要要要从从从从主主主主调调调调函函函函数数数数传传传传送送送送3 3个个个个数数数数据据据据,源源源源字字字字符符符符串串串串、截截截截取取取取位位位位置置置置s s、长长长长度度度度lenlen。在在在在形形形形参参参参中中中中定定定定义义义义一一一一个个个个指指指指针针针针变

77、变变变量量量量a a接接接接收收收收源源源源字字字字符符符符串串串串的的的的首首首首地地地地址址址址,在在在在函函函函数数数数中中中中再再再再定定定定义义义义一一一一个个个个存存存存储储储储类类类类型型型型为为为为staticstatic的的的的字字字字符符符符数数数数组组组组substrsubstr用于存放子串,指针变量用于存放子串,指针变量用于存放子串,指针变量用于存放子串,指针变量psps指向指向指向指向substrsubstr数组。数组。数组。数组。 在在在在截截截截取取取取子子子子串串串串的的的的过过过过程程程程中中中中,如如如如果果果果起起起起始始始始位位位位置置置置s s小小小小

78、于于于于1 1或或或或大大大大于于于于源源源源串串串串则则则则子子子子串串串串为为为为空空空空,如如如如果果果果截截截截取取取取长长长长度度度度lenlen小小小小于于于于1 1子子子子串串串串也也也也为为为为空空空空;否否否否则则则则循循循循环环环环复复复复制制制制子子子子串串串串,直直直直到到到到复复复复制制制制了了了了lenlen个个个个字字字字符符符符或或或或从从从从源源源源串串串串读读读读到到到到 00 结结结结束束束束。最最最最后后后后函函函函数数数数将将将将返返返返回回回回substrsubstr字符数组的首地址。字符数组的首地址。字符数组的首地址。字符数组的首地址。2024/7

79、/2756char *subcut(char char *subcut(char * *a a, int , int s s, int , int lenlen) ) static char static char substrsubstrSIZE+1; /* substrSIZE+1; /* substr用于存放子串用于存放子串用于存放子串用于存放子串 */ */ int n;int n; char char * *psps; ; psps= =substrsubstr; ; if( if(s s1 | strlen(strlen(a a) |) | len len1) 1) printf(

80、data errorn); /* printf(data errorn); /* 数据错,子串为空数据错,子串为空数据错,子串为空数据错,子串为空 */ */ elseelse for (n=1, for (n=1,a a+=+=s s-1; n=-1; ny) return(x); else return(y);由于优先级的问题,由于优先级的问题,()是必须的()是必须的(*p)中的中的( )是必须的,实参是必须的,实参表应与函数的形参表一一对表应与函数的形参表一一对应应8.3.4 指向函数的指针指向函数的指针 目标函数必须要事先声明,目标函数必须要事先声明,即使是整型函数也要声明即使是整型

81、函数也要声明2024/7/2761各种类型指针的定义各种类型指针的定义 int int int int * * * * p p p p; ; ; ;intintintint ( ( ( (* * * * p p p p) ) ) )nnnn; ; ; ;intintintint * * * * q q q qnnnn; ; ; ;intintintint ( ( ( (* * * * p p p p) ) ) )( ( ( ( ) ) ) ); ; ; ;intintintint * * * * f f f f( ( ( ( ) ) ) ); ; ; ;intintintint * * * *

82、 * * * * p p p p; ; ; ;p p p p是一个指向整型数据的指针变量。是一个指向整型数据的指针变量。是一个指向整型数据的指针变量。是一个指向整型数据的指针变量。(* * * *p p p p)指出指出指出指出p p p p是一个指针,是一个指针,是一个指针,是一个指针, nnnn表示指向表示指向表示指向表示指向含有含有含有含有n n n n个元素的个元素的个元素的个元素的一维数组一维数组一维数组一维数组。根据优先级,根据优先级,根据优先级,根据优先级,q q q q先和先和先和先和 结合,所以结合,所以结合,所以结合,所以q q q q是一是一是一是一个个个个指针数组指针数

83、组指针数组指针数组。( ( ( (* * * *p p p p) ) ) )指出指出指出指出p p p p是一个指针,是一个指针,是一个指针,是一个指针,( ( ( ( ) ) ) )表明此指针表明此指针表明此指针表明此指针是指向函数的,函数的返回值是整型。是指向函数的,函数的返回值是整型。是指向函数的,函数的返回值是整型。是指向函数的,函数的返回值是整型。根据优先级,根据优先级,根据优先级,根据优先级,f f f f先和先和先和先和( ( ( ( ) ) ) )结合,所以结合,所以结合,所以结合,所以f f f f是一是一是一是一个函数名,个函数名,个函数名,个函数名,* * * *说明函数

84、的返回值是指向说明函数的返回值是指向说明函数的返回值是指向说明函数的返回值是指向整型数据的指针。整型数据的指针。整型数据的指针。整型数据的指针。p p p p是指向整型指针的二级指针变量。是指向整型指针的二级指针变量。是指向整型指针的二级指针变量。是指向整型指针的二级指针变量。 指针变量定义的各种形式有时指针变量定义的各种形式有时指针变量定义的各种形式有时指针变量定义的各种形式有时容易混淆,应从定义中出现的运算容易混淆,应从定义中出现的运算容易混淆,应从定义中出现的运算容易混淆,应从定义中出现的运算符优先级入手,帮助理解和记忆。符优先级入手,帮助理解和记忆。符优先级入手,帮助理解和记忆。符优先级入手,帮助理解和记忆。如如如如“ “ ” ”和和和和“ “( )” ”优先级高,优先级高,优先级高,优先级高,“ “* *” ”优先级低,这样就可以知道优先级低,这样就可以知道优先级低,这样就可以知道优先级低,这样就可以知道哪里需要加括号,哪里不能加。哪里需要加括号,哪里不能加。哪里需要加括号,哪里不能加。哪里需要加括号,哪里不能加。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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