第七章 指 针 ·17·
while(*(t-1) *(t--)=*(t-1); *(t--)=ch; } ????15.若有定义:int a[]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[3], m; 则下面程序段的输出是 ____11____。 for ( m=0; m<3; m++) p[m]=&a[m*4]; printf(\%d\\n\, p[2][2]); 16.下面程序的运行结果是_1,2_______。 #include \stdio.h\ main() { char s[]=\1357\, *t; t=s; printf(\%c, %c\\n\, *t, ++*t); } 17.以下程序将数组a中的数据按逆序存放。请填空。 #include \stdio.h\ #define M 10 main() { int a[M], m, n, temp; for( m=0; m m=0; n=M-1; while(m temp=*(a+m); 【*(a+m)=*(a+n)】; *(【a+n】)=temp; m++; n--;} for (m=0;m } 18.以下程序在a数组中查找与x值相同的元素的所在位置。请填空。 #include \stdio.h\ main() { int a[11], x, m; printf(\please input ten numbers:\\n\); for(m=1;m<11;m++) scanf(\%d\, a+m); printf(\please input x:\); 第七章 指 针 ·18· scanf(\%d\, &x); *a=【x】; m=10; while (x!=*(a+m)) 【m--】; if (m>0) printf(\]'s position is : M\\n\, x, m); else printf(\%d not been found!\\n\, x); } 19.以下程序的功能是________。 #include \stdio.h\ main() { char * s[]=={ \PASCAL\, \FORTRAN\, \COBOL\, \BASIC\}; char **p; int n; p=s; for (n=0;n<4;n++) printf(\%s\\n\, *(p++)); } 20.若有定义和语句:int a[4]={1,2,3,4},*p; p=&a[2]; ,则*--p的值是_2_______。 21.若有定义和语句:int a[2][3]={0}, (*p)[3]; p=a;,则p+1表示数组__指向数组a的第二行。 22.若有如下定义和语句: int *p[3], a[6], n; for (m=0;m<3;m++) p[m]=&a[2*m]; 则*p[0]引用的是a数组元素【a[0]】;*(p[1]+1)引用的是a数组元素【a[3]】。 23.若有以下定义和语句,在程序中引用数组元素a[m]的四种形式是:【*(p+m)】、【*(a+m)】、【p[m]】和a[m]。(假设m 已正确说明并赋值) int a[10], *p; p=a; 24.下面程序的输出结果是__1 3 5 7 9 11______。 #include \stdio.h\ main() { int b[2][3]={1,3,5,7,9,11}; int *a[2][3]; int i,j; int **p, m; for(i=0;i<2;i++) for(j=0;j<3;j++) a[i][j]=*(b+i)+j; p=a[0]; for(m=0;m<6;m++) { 第七章 指 针 ·19· printf(\M\, **p); p++; } } 25.定义语句int *f();和int (*f)();的含义分别为【返回值的类型为int *型的函数f】和【指向返回值的类型为int 型的函数的指针】。 26.请根据运行结果,完成main函数中的填空。 Array_add( int a[], int n) { int m, sum=0; for (m=0;m main() { int Array_add(int a[], int n); static int a[3][4]={2,4,6,8,10,12,14,16,18,20,22,24}; int *p, total1, total2; 【int (*pt)()】; pt=Array_add; p=a[0]; total1=Array_add(p,12); total2=(*pt)(【a[0],12】); printf(\total1=%d\\ntotal2=%d\\n\, total1,total2);12 } 运行结果:total1=156 total2=156