指针练习题(一)选择题1.若有以下定义,则对a数组元素的正确引用是_________.inta[5],*p=a;a)*&a[5]b)a+2c)*(p+5)d)*(a+2)2.若有定义:inta[2][3],则对a数组的第i行j列元素地址的正确引用为______.a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j3.若有以下定义,inta[10],*p=a;则p+5表示_______.a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值4.下面程序段的运行结果是_________.char*s=abcde;s+=2;printf(%d,s);a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);6.以下正确的程序段是_________.a)charstr[20];b)char*p;scanf(%s,&str);scanf(%s,p);c)charstr[20];d)charstr[20],*p=str;scanf(%s,&str[2]);scanf(%s,p[2]);7.若有说明语句chara[]=Itismine;char*p=Itismine;则以下不正确的叙述是________.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符8.下面程序的运行结果是_______.#includestdio.h#includestring.hmain(){char*s1=AbDeG;char*s2=AbdEg;s1+=2;s2+=2;printf(%d\n,strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值9.下面程序的运行结果是_______.#includestdio.h#includestring.hfun(char*w,intn){chart,*s1,*s2;s1=w;s2=w+n-1;while(s1s2){t=*s1++;*s1=*s2--;*s2=t;}}main(){char*p;p=1234567;fun(p,strlen(p));puts(p);}a)7654321b)1714171c)1711717d)717717110.变量的指针,其含义是指该变量的_________.a)值b)地址c)名d)一个标志11.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point12.若有说明;int*p,m=5,n;以下正确的程序段的是________.a)p=&n;b)p=&n;scanf(%d,&p);scanf(%d,*p);c)scanf(%d,&n);d)p=&n;*p=n;*p=m;13.已知有以下的说明,inta[]={8,1,2,5,0,4,7,6,3,9};那么a[*(a+a[3])]的值为___.14.对于指向同一数组的指针变量,不能进行哪种运算?()A.+B.-C.=D.==15.若有以下说明和语句,且0=i10,则下面哪个是对数组元素的错误引用?()inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;A.*(a+i)B.a[p-a]C.p+iD.*(&a[i])16.若有以下说明和语句,且0=i10,则下面哪个是对数组元素地址的正确表示?()inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;A.&(a+1)B.a++C.&pD.&p[i]17.以下程序的输出结果是哪一项?()#includestdio.hmain(){inta[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;for(i=0;i4;i++)p[i]=&a[i*3];printf(%d\n,*p[3]);}A.输出项不合法B..7D.1018.有以下说明和语句,,则p2-p1的值为多少?(单选)()inta[10],*p1,*p2;p1=a;p2=&a[5];A.5B..10D.没有指针与指针的减法19.若有以下定义和语句:ints[4][5],(*ps)[5];ps=s;则对s数组元素的正确引用形式是()A)ps+1B)*(ps+3)C)ps[0][2]D)*(ps+1)+320.若有以下的定义,intt[3][2];能正确表示t数组元素地址的表达式是()A)&t[3][2]B)t[3]C)t[1]D)*t[2]21.以下程序的输出结果是a=_,b=_,c=_。#includestdio.hintfunc(inta,int*p);voidmain(){inta=1,b=2,c;c=func(a,&b);a=1,b=4,c=6;b=func(c,&a);c=6,a=9,b=16a=func(b,&c);b=16,c=19,a=36;printf(a=%d,b=%d,c=%d,a,b,c);}intfunc(inta,int*p){a++;*p=a+2;return(*p+a);}22.有以下程序voidfun(char*c,intd){*c=*c+1;d=d+1;printf(%c,%c,,*c,d);}main(){chara='A',b='a';fun(&b,a);printf(%c,%c\n,a,b);}程序运行后的输出结果是()。A)B,a,B,aB)a,B,a,BC)A,b,A,bD)b,B,A,b23.在说明语句:int*f();中,标识符f代表的是()A)一个用于指向整型数据的指针变量B)一个用于指向一维数组的行指针C)一个用于指向函数的指针变量D)一个返回值为指针型的函数名24.以下程序段给数组所有元素输入数据,应在下划线处添入的是()A)a+(i++)B)&a[i+1]C)a+iD)&a[++i]main(){inta[10],i=0;while(i10)scanf(“%d”,_____);……}25.以下程序的输出结果是()A)17B))19D)20main(){inta[]={2,4,6,8,10},y=1,x,*p;p=&a[1];for(x=0;x3;x++)y+=*(p+x);printf(“%d\n”,y);}26、若有定义:intx,*pb;则以下正确的赋值表达式是()A、pb=&xB、pb=xC、*pb=&xD、*pb=*x27、以下程序的输出结果是()A、因变量无定义输出不定值B、0C、-1D、1#includeStdio.h#includeConio.hintmain(void){printf(%d\n,NULL);getch();return0;}28、以下程序的输出结果是()A、5,2,3B、-5,-12,-7C、-5,-12,-17D、5,-2,-7#includeStdio.h#includeConio.hvoidsub(intx,inty,int*z){*z=y-x;}intmain(){inta,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(%d,%d,%d\n,a,b,c);getch();return0;}29、以下程序的输出结果是()A、4B、6C、8D、10#includeStdio.h#includeConio.hintmain(){intk=2,m=4,n=6;int*pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf(%d\n,n);getch();return0;}30、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()A、20B、30C、21D、3131、已知指针p的指向如5题中图所示,则表达式*++p的值是()A、20B、30C、21D、3132、已知指针p的指向如5题中图所示,则表达式++*p的值是()A、20B、30C、21D、3133、以下程序的输出结果是()#includeStdio.h#includeConio.hvoidprtv(int*x){printf(%d\n,++*x);}intmain(){inta=25;prtv(&a);getch();return0;}A、23B、24C、25D、2634、以下程序的输出结果是()#includeStdio.h#includeConio.hintmain(){int**k,*a,b=100;a=&b;k=&a;printf(%d\n,**k);getch();return0;}A、运行出错B、100C、a的地址D、b的地址35、以下程序的输出结果是()#includeStdio.h#includeConio.hvoidfun(float*a,float*b){floatw;*a=*a+*a;w=*a;*a=*b;*b=w;}intmain(){floatx=2.0,y=3.0;float*px=&x,*py=&y;fun(px,py);printf(%2.0f,%2.0f\n,x,y);getch();return0;}A、4,3B、2,3C、3,4D、3,236、以下程序的输出结果是()#includeStdio.h#includeConio.hvoidsub(floatx,float*y,float*z){*y=*y-1.0;*z=*z+x;}intmain(){floata=2.5,b=9.0,*pa,*pb;pa=&a;pb=&b;sub(b-a,pa,pb);printf(%f\n,a);getch();return0;}A、9.000000B、1.500000C、8.000000D、10.50000037、设有以下定义:inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*prt)[3]=a,*p=a[0];则下列能够正确表示数组元素a[1][2]的表达式是()A、*((*prt+1)[2])B、*(*(p+5))C、(*prt+1)+2D、*(*(a+1)+2)(二)填空题1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。#includestdlib.hmain(){int*a,*b,*c,num,x,y,z;a=&x;b=&y;c=&z;printf(输入3个整数:);scanf(%d%d%d,a,b,c);printf(%d,%d,%d\n,*a,*b,*c);num=*a;if(*a*b)______;if(num*c)______;printf(输出最小整数:%d\n,num);}2.下面程序段的运行结果是________.chars[80],*sp=HELLO!;sp=strcpy(s,sp);s[0]='h';puts(sp);3.下面程序段的运行结果是________.charstr[]=abc\0def\0ghi,*p=str;printf(%s,p+5);4.下面程序的功能是将两个字符串s1和s2连接起来。请填空。#includestdio.hmain(){chars1[80],s2[80];gets(s1);gets(s2);conj(s1,s2);puts(s1);}conj(char*p1,char*p2){char*p=p1;while(*p1)______;while(*p2){*p1=______;p1++;p2++;}*p1='\0';__________;}5.若有定义:inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是___.*(a+5