{ int a=18,*p=&a;
printf(“a=%d\\n”,a); printf(“*p=%d\\n”,*p); }
2.从键盘输入两个整数到a、b,按由大到小输出。 #include
{
int a,b,*pa=&a,*pb=&b,*p; scanf(“%d %d”,&a,&b); if(*pa<*pb) { p=pa; pa=pb; pb=p;
}
printf(“\\na=%d,b=%d\\n”,a,b); printf(“\\n max=%d,min=%d”,*pa,*pb); }
3.二级指针的使用。 #include
{ int a=22,*p,**pp; p=&a; pp=&p;
printf(“*p=%d\\n”,*p); printf(“**pp=%d\\n”,**pp); }
4.编写一个交换两个变量的函数,在主程序中调用,实现两个变量值的交换。 #include
int *pa,*pb;
void swap(int *p1,int *p2); scanf(“%d%d”,&a,&b); pa=&a; pb=&b; swap(pa,pb);
printf(“\\na=%d,b=%d\\n”,a,b); }
void swap(int *p1,int *p2) {int temp; temp=*p1; *p1=*p2; *p2=temp;
}
5.指针交换比较。 #include
{ int a,b,*pa,*pb;
void swap(int *p1,int *p2) pa=&a;
pb=&b;
scanf(“%d %d”,&a,&b); swap(pa,pb);
printf(“\\n main0:a=%d,b=%d\\n”,a,b);
printf(“\\n main1:*pa=%d,*pb=%d\\n”,*pa,*pb); }
void swap(int *p1,*p2) { int *p; p=p1;
p1=p2; p2=p;
printf(“\\nswap:*p1=%d,*p2=%d\\n”,*p1,*p2); }
6.指针函数实例。
#include
int *min(int x,int y); int *minp(int *,int *); scanf(“\\nmin=%d”,*p); p=min(a,b);
printf(“\\nmin=%d”,*p); p=minp(&a,&b);
printf(“\\nminp=%d”,*p); }
int *min(int x,int y) { if(x int *minp(int *x,int *y) { int *q; q=*x<*y?x:y; return(q); } 7.函数max()用来求一维数组中元素的最大值,在主调函数中用函数名调用该函数与函数指针调用该函数来实现。 #include #define M 8 void main() { float sumf,sump; float a[M]={11,2,-3,4,5,5,69,7,80}; float(*p)() float max(float a[],int n); p=max; sump=(*p)(a,M); sumf=max(a,M); printf(“sump=%.2f\\n”,sump); printf(“sumf=%.2f\\n”,sumf); } float max(float a[],int n) { int k; float s; s=a[0]; for(k=0;k 8.在主函数中输入三角形的两条直角边,求三角形的面积和斜边长。 #include int m,n; float s,l; float(*q)(); float area(int a,int b,float(*p)(); scanf(“%d%d”,&m,&n); q=area; s=f(m,n,q); l=f(m,n,length); printf(“Area of the right triangle is %.2f\\n”,s); printf(“Length of the hypotenuse is %.2f\\n”,l); } float area(int a,int b) {float z; z=a*b/2; return(z); } float z; z=sqrt(a*a+b*b); return(z); } float f(int a,int b,float(*p)()) {float y; y=(*p)(a,b); rerurn(y); } 9.使用不同方法输出整型数组a的元素。 #include static int a[5]={1,3,5,7,9}; int i,*p; for(i=0;i<5;i++) printf(“?d”,a[i]); putchar(‘\\n’); for(i=0;i<5;i++) printf(“M”,*(a+i)); putchar(‘\\n’); for(p=a;p for(i=0;i<5;i++) printf(“%d”,p[i]); } 10.从键盘输入5个整数到数组a中,然后输出。 #include { int a[5],k,*p; p=a; for(k=0;k<5;k++) scanf(“%d”,p++); p=a; for(k=0;k<5;k++) printf(“m”,*(p++)); } 11.用指针表示法输出二维数组的个元素。 #include {static int a[2][3]={{0,1,2,},{3,4,5}}; int k,j,*p; for(j=0;j<2;j++) {for(k=0;k<3;k++) printf(“]”,*a[j]+k)); putchar(‘\\n’); } putchar(‘\\n’); for(j=0;j<2;j++) {for(k=0;k<3;k++) printf(“]”,*(*(a+j)+k)); putchar(‘\\n’); } p=a[0]; for(j=0;j<2;j++) {for(k=0;k<3;k++) printf(“]”,*p(++)); putchar(‘\\n’); } } 12.用数组名常量指针输出二维数组,并将数组中的最大元素及所在行列号输出。 #include { int i,j,m,n,max; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; m=0;n=0; max=**a; for(i=0;i<3;i++) {printf(“\\n”); for(j=0;j<4;j++) {printf(“]”,*(*(a+i)+j)); if(max<*(*(a+i)+j)) {max=*(*(a+i)+j); m=i;n=j; } } } printf(“\\nmax is:a[-][-]=%-5d”,m,n,max); } 13.用指向数组元素的指针输出二维数组,并将数组中的最大元素及所在行列号输出。 #include { int i,j,m,n,max; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p; p=a[0]; max=*p; m=0;n=0;