1、活动活动:技能测试技能测试什么是指针什么是指针?什么是指针变量什么是指针变量?判断语句下面语句是否正确判断语句下面语句是否正确?若不正确,指若不正确,指出原因出原因int a,*p;*p=9;a=*p;若计算机运行下面程序段后,运行结果是什么若计算机运行下面程序段后,运行结果是什么?int a=5,*p;p=&a;printf(”%d”,(*p)+);指针变量作函数参数指针变量作函数参数活动:分析下面程序的运行结果活动:分析下面程序的运行结果main()main()void sub(int void sub(int*px,int px,int*py);py);int x,y;int x,y;s
2、ub(&x,&y);sub(&x,&y);printf(printf(“%d,%dn%d,%dn”,x,y);,x,y);void sub(int void sub(int*px,int px,int*py)py)*px=10;px=10;*py=20;py=20;示示 例例对输入的两个数按由大到小的顺序输出(用函数实现)对输入的两个数按由大到小的顺序输出(用函数实现)main()int a,b;int*pa,*pb;pa=&a;pb=&b;scanf(”%d%d”,pa,pb);if(ab)调用排序函数调用排序函数;printf(”n%d,%d”,a,b);试写出排序函数试写出排序函数voi
3、d swap(int*p,int*q)int t;t=*p;*p=*q;*q=t;swap(pa,pb);应该有函数声应该有函数声明明int a,b,*pa,*pb;void swap(int*p,int*p);数组指针的概念数组指针的概念数组的指针数组的指针:数组在内存中的起始地址,即数组名数组在内存中的起始地址,即数组名 数组元素的指针数组元素的指针:数组元素在内存中的起始地址数组元素在内存中的起始地址 例:例:int a5=1,3,5,7,9;135791010H1012H1014H1016H1018Ha+0a+1a+2a+3a+4ai的地址的地址是是a+i数组元素物理地址的计算方式数组
4、元素物理地址的计算方式第第i个元素实际物理地址个元素实际物理地址=a+i*单个元素所占字节单个元素所占字节数组元素的引用方法数组元素的引用方法下标法下标法如:如:aiai地址法地址法如:如:*(a+i)(a+i)可以考虑使用指针变量可以考虑使用指针变量构成的地址法构成的地址法指针变量表示数组元素的方法指针变量表示数组元素的方法135791010H1012H1014H1016H1018Hp+0例:例:int a5=1,3,5,7,9;int *p;p=a;p+1p+2p+3p+4a活动:分析程序运行结果活动:分析程序运行结果若输入的数据是:若输入的数据是:8 7 1 3 9main()main(
5、)int a5,int a5,*p=a,i;p=a,i;for(i=0;i5;i+)for(i=0;i5;i+)scanf(scanf(”%d%d”,p+i);,p+i);printf(printf(”a5:na5:n”););for(i=0;i5;i+)for(i=0;i5;i+)printf(printf(“%d%d ”,*(p+i);(p+i);活动:分析程序运行结果活动:分析程序运行结果main()main()int a5=1,3,5,7,9,I,int a5=1,3,5,7,9,I,*p;p;for(I=0;I5;I+)for(I=0;I5;I+)printf(printf(”%d%d”,aI);,aI);printf(printf(”nn”););for(I=0;I5;I+)for(I=0;I5;I+)printf(printf(”%d%d”,*(a+I);(a+I);printf(printf(”nn”););for(p=a;pa+5;p+)for(p=a;pa+5;p+)printf(printf(”%d%d”,*p);p);作作 业业P151:2-3