指针练习五一.单选1.有以下程序:#includestdio.hvoidfun(int*a,inti,intj){intt;if(ij){t=a[i];a[i]=a[j];a[j]=t;fun(a,++i,--j);}}main(){inta[]={1,2,3,4,5,6},i;fun(a,0,5);for(i=0;i6;i++)printf(%d,a[i]);return;}执行后输出结果是______。A.654321B.432156C.456123D.1234562.以下语句的输出结果是______。chars[]=\t\\chinese\\girl\n;printf(%d,strlen(s));A.12B.15C.13D.143.有以下程序:#includestdio.hvoidmain(){char*s[]={one,two,three},*p;p=s[1];printf(%c,%s\n,*(p+1),s[0]);}执行后输出结果是______。A.n,twoB.t,oneC.w,oneD.o,two4.若已知说明语句:inta,s[3][3];则不能将s[2][1]的值赋给变量a的语句是______。A.a=s[2][1];B.a=*(*(s+2)+1);C.a=*(s[2]+1);D.a=*(*(s+2));5.以下程序的执行结果是______。#includestdio.hvoidmain(){inti,*p;p=&i;*p=8;printf(i=%d,i);}A.i为不定值B.i=0C.i=8D.程序有错误6.以下程序:#includestdio.hcharfun(char*p){if(*p='A'&&*p='Z')*p-='A'-'a';return*p;}main(){chars[80],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);p++;}return;}当输入BIGBIGWORLD回车,则输出结果是______。A.bigbigWORLDB.BIGBIGworldC.bigbigworldD.BIGBIGWORLD7.以下程序的运行结果是______。#includestdio.hvoidabc(char*p){inti,j;for(i=j=0;*(p+i)!='\0';i++)if(*(p+i)'n'){*(p+j)=*(p+i);j++;}*(p+j)='\0';}main(){charstr[]=morning;abc(str);puts(str);return;}A.morigB.morningC.migD.or8.设intx[]={4,2,3,1},q,*p=&x[1];则执行语句q=(*--p)++后,变量q的值为______。A.4B.3C.2D.19.有以下程序:#includestdio.h#includestring.hvoidmain(){charstr[][20]={Hello,Beijing},*p=str;printf(%d\n,strlen(p+20));}程序运行后的输出结果是______。A.0B.5C.7D.2010.定义compare(char*s1,char*s2)函数,以实现比较两个字符串大小的功能,在下划线处应填入的是______。#includestdio.hcompare(char*s1,char*s2){while(*s1&&*s2&&_______){s1++;s2++;}return*s1-*s2;}main(){printf(%d\n,compare(abCd,abc);return;}A.*s1!=*s2B.*s1==*s2C.*s1=*s2D.s1!=s211.如下程序的执行结果是_______。#includestdio.hvoidmain(){inta[]={2,4,6,8},*p=a,i;for(i=0;i4;i++)a[i]=*p++;printf(%d\n,a[2]);}A.6B.8C.4D.212.以下程序的输出结果是______。#includestdio.hvoidmain(){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][2]);}A.输出项不合法B.6C.8D.1213.若已有定义int(*p)();则指针p______。A.代表函数的返回值B.指向函数的入口地址C.表示函数的类型D.表示函数返回值的类型14.以下程序段的输出结果是______。int**pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf(%d,%d\n,*p,**pp);A.10,20B.10,10C.20,10D.20,2015.阅读以下函数:fun(char*s1,char*s2){inti=0;while(s1[i]==s2[i]&&s2[i]!='\0')i++;return(s1[i]=='\0'&&s2[i]=='\0');}此函数的功能是______。A.将s2所指字符串赋给s1。B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0。C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0。D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0。16.以下程序的运行结果是______。#includestdio.hvoidfun(char*s);main(){staticcharstr[]=123;fun(str);return;}voidfun(char*s){if(*s){fun(++s);printf(%s\n,--s);}}A.3B.123C.1D.332121223321112312317.以下程序的输出结果是______。#includestdio.hvoidmain(){inta[]={1,2,3,4,5,6},*p;p=a;*(p+3)+=2;printf(%d,%d\n,*p,*(p+3));}A.0,5B.1,5C.0,6D.1,618.执行以下程序段后,a的值是______。staticints[]={6,8,2,5,4,9,1,3};inta=0,i;for(i=1;i8;i+=2)a+=*(s+i);A.13B.25C.15D.不确定19.有以下程序:#includestdio.hvoidfun(char*a,char*b){a=b;(*a)++;}main(){charc1='A',c2='a',*p1,*p2;p1=&c1;p2=&c2;fun(p1,p2);printf(%c%c\n,c1,c2);return;}程序运行后的输出结果是______。A.AbB.aaC.AaD.Bb20.在说明语句:int*f();中,标识符f代表的是______。A.一个用于指向整型数据的指针变量。B.一个用于指向一维数组的行指针。C.一个用于指向函数的指针变量。D.一个返回值为指针型的函数名。21.有如下语句说明:1.char(*ptr)[5];2.int*fip();3.int(*pfi)();4.int**pfpi;正确的说法是______。A.第1个不合法B.都合法C.第3个不合法D.第4个不合法22.以下程序的输出结果为______。staticchars[]=language;char*p;p=a;while(*p)printf(%c,*p-32);p++;A.LANGUAGEB.LANGC.languageD.陷入死循环23.有以下程序段:#includestdio.hvoidmain(){inta=5,*b,**c;c=&b;b=&a;……}程序在执行了c=&b;b=&a;语句后,表达式:**c的值是______。A.变量a的地址B.变量b中的值C.变量a中的值D.变量b的地址24.若有定义char*language[]={FORTRAN,BASIC,PASCAL,JAVA,C};则language[2]的值是______。A.一个字符B.一个地址C.一个字符串D.不定值25.以下程序的运行结果是______。#includestdio.hvoidsub(int*x,inty,intz){*x=y-z;}main(){inta,b,c;sub(&a,10,5);sub(&b,a,7);sub(&c,a,b);printf(%d,%d,%d\n,a,b,c);return;}A.10,-2,5B.10,5,7C.10,-2,7D.5,-2,7二.判断1.有定义和语句:inta[10],*p;p=a+5;则p[2]相当于a[2]。2.内存单元间接访问是直接根据变量名存取变量的值。3.int*p[3];定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素。4.以下程序:#includestdio.hvoidmain(){inta[5]={2,1,3,4,5};int*p1,*p2,num;p1=&a[0];p2=&a[3];num=p2-p1;printf(num=%d\n,num);}输出结果为num=2。5.当指针p指向数组a的首址后,由于p[i]和a[i]都能引用数组元素,所以这里p和a是等价的。6.数组名代表数组的起始地址。7.当两个指针指向同一数组时,两个指针相减的差即为两个指针相隔的元素个数。8.各个变量定义为:inti;charc,*s;floatf,g;则表达式*(s+i)+(int)f和*s+(int)c均为整型。9.以下程序:#includestdio.hvoidswap(int*,int*);main(){inta=3,b=8;swap(&a,&b);printf(a=%d,b=%d\n,a,b);return;}voidswap(int*x,int*y){inttemp=*x;*x=*y;*y=temp;}输出结果为:a=3,b=8。10.指针变量本身也是一种变量,它存放各种类型数据的地址。三.填空1.以下程序的运行结果是___________。#includestdio.hmain(){staticinta[10],i;for(i=0;i10;i++)a[i]=i+1;for(i=0;i10;i=i+2)printf(%d,*(a+i));return;}2.以下函数的功能是删除字符串s中的所有数字字符,请填空。voiddele(char*s){intn=0,i;for(i=0;s[i];i++)if(___________)s[n++]=s[i];s[n]='\0';}3.定义inta[]={1,2,3,4,5},*p=a;表达式*++p的值是___________。4.下面程序是判断输入的字符是否中心对称,(如“xyzzyx”和“xyzyx”都中心对称),请填空。#includestdio.h#includestring.hmain(){chars[100],*p1,*p2;intn;gets(s);n=strlen(s);p1=s;p2=s+n-1;while(p1p2)if(*p1!=*p2)break;else{p1++;___________;}if(p1p2)printf(NO\n);elseprintf(YES\n);return;}5.以下程序的执行结果是___________。#includestdio.hvoidmain(){inta[5]={3,4,5,6,7};inti,*p;for(p=a;p(a+3);p++)printf(%d,,*p);}6.若有以下程序:#includestdio.hintf(intx,inty){return(y