C语言指针习题及答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

指针习题及答案一.选择题1.变量的指针,其含义是指该变量的B。A)值B)地址C)名D)一个标志2.已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是B。A)k=*ptr1+*ptr2B)ptr2=kC)ptr1=ptr2D)k=*ptr1*(*ptr2)3.若有说明:int*p,m=5,n;以下程序段正确的是D。A)p=&n;B)p=&n;scanf(“%d”,&p);scanf(“%d”,*p);C)scanf(“%d”,&n);D)p=&n;*p=n;*p=m;4.已有变量定义和函数调用语句:inta=25;print_value(&a);下面函数的输出结果是D。voidprint_value(int*x){printf(“%d\n”,++*x);}A)23B)24C)25D)265.若有说明:int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是C。A)p1=&m;p2=&p1;B)p1=&m;p2=&n;*p1=*p2;C)p1=&m;p2=p1;D)p1=&m;*p1=*p2;6.若有语句:int*p,a=4;和p=&a;下面均代表地址的一组选项是D。A)a,p,*&aB)&*a,&a,*pC)*&p,*p,&aD)&a,&*p,p7.下面判断正确的是C。A)char*a=”china”;等价于char*a;*a=”china”;B)charstr[10]={“china”};等价于charstr[10];str[]={“china”;}C)char*s=”china”;等价于char*s;s=”china”;D)charc[4]=”abc”,d[4]=”abc”;等价于charc[4]=d[4]=”abc”;8.下面程序段中,for循环的执行次数是C。char*s=”\ta\018bc”;for(;*s!=’\0’;s++)printf(“*”);A)9B)7C)6D)59.下面能正确进行字符串赋值操作的是C。A)chars[5]={“ABCDE”};B)chars[5]={‘A’,’B’,’C’,’D’,’E’};C)char*s;s=”ABCDE”;D)char*s;scanf(“%s”,s);10.下面程序段的运行结果是C。char*s=”abcde”;s+=2;printf(“%d”,s);A)cdeB)字符’c’C)字符’c’的地址D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是B。A)c=*p1+*p2B)p2=cC)p1=p2D)c=*p1*(*p2)12.设有程序段:chars[]=”china”;char*p;p=s;则下面叙述正确的是D。A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等C)s数组长度和p所指向的字符串长度相等D)*p与s[0]相等13.以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是D。A)strcpy1(char*p1,char*p2){while((*p1++=*p2++)!=’\0’);}B)strcpy2(char*p1,char*p2){while((*p1=*p2)!=’\0’){p1++;p2++}}C)strcpy3(char*p1,char*p2){while(*p1++=*p2++);}D)strcpy4(char*p1,char*p2){while(*p2)*p1++=*p2++;}14.下面程序段的运行结果是C。chara[]=”language”,*p;p=a;while(*p!=’u’){printf(“%c”,*p-32);p++;}A)LANGUAGEB)languageC)LANGD)langUAGE16.以下与库函数strcmp(char*s,char*t)功能相等的程序段是C。A)strcmp1(char*s,char*t){for(;*s++=*t++;)if(*s==’\0’)return0;return(*s-*t);}B)strcmp2(char*s,char*t){for(;*s++=*t++;)if(!*s)return0;return(*s-*t);}C)strcmp3(char*s,char*t){for(;*t==*s;){if(!*t)return0;t++;s++;}return(*s-*t);}D)strcmp4(char*s,char*t){for(;*s==*t;s++,t++)if(!*s)return0;return(*t-*s);}17.以下说明不正确的是D。A)chara[10]=”china”;B)chara[10],*p=a;p=”china”;C)char*a;a=”china”;D)chara[10],*p;p=a=”china”;18.设有说明语句:chara[]=”Itismine”;char*p=”Itismine”;则以下不正确的叙述是D。A)a+1表示的是字符t的地址B)p指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放10个字符19.若已定义chars[10];则在下面表达式中不表示s[1]的地址是B。A)s+1B)s++C)&s[0]+1D)&s[1]20.若有定义:inta[5],*p=a;则对a数组元素的正确引用是D。A)*&a[5]B)a+2C)*(p+5)D)*(a+2)21.若有定义:inta[5],*p=a;则对a数组元素地址的正确引用是D。A)p+5B)*a+1C)&a+1D)&a[0]22.若有定义:inta[2][3];则对a数组的第i行第j列元素值的正确引用是A。A)*(*(a+i)+j)B)(a+i)[j]C)*(a+i+j)D)*(a+i)+j23.若有定义:inta[2][3];则对a数组的第i行第j列元素地址的正确引用是D。A)*(a[i]+j)B)(a+i)C)*(a+j)D)a[i]+j24.若有程序段:inta[2][3],(*p)[3];p=a;则对a数组元素地址的正确引用是。A)*(p+2)B)p[2]C)p[1]+1D)(p+1)+225.若有程序段:inta[2][3],(*p)[3];p=a;则对a数组元素的正确引用是C。A)(p+1)[0]B)*(*(p+2)+1)C)*(p[1]+1)D)p[1]+226.若有定义:inta[5];则a数组中首元素的地址可以表示为C。A)&aB)a+1C)aD)&a[1]27.若有定义:int(*p)[4];则标识符pC。A)是一个指向整型变量的指针B)是一个指针数组名C)是一个指针,它指向一个含有四个整型元素的一维数组D)定义不合法28.以下与int*q[5];等价的定义语句是C。A)intq[5]B)int*qC)int*(q[5])D)int(*q)[5]29.以下正确的说明语句是B。A)int*b[]={1,3,5,7,9};B)inta[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};C)inta[]={1,3,5,7,9};int*num[5]={a[0],a[1],a[2],a[3],a[4]};D)inta[3][4],(*num)[4];num[1]=&a[1][3];30.若有定义:intb[4][6],*p,*q[4];且0≤i4,则不正确的赋值语句是D。A)q[i]=b[i];B)p=b;C)p=b[i];D)q[i]=&b[0][0]32.若要对a进行自减运算,则a应有下面说明D。A)intp[3];B)intk;C)char*a[3]D)intb[10];int*a=p;int*a=&k;int*a=b+1;33.以下选项中,对指针变量p的正确操作是B。A)inta[3],*p;B)inta[5],*p;C)inta[5];D)inta[5]p=&a;p=a;int*p=a=100;int*p1,*p2=a;*p1=*p2;34.若有定义:intx[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是C。A)x[3]B)p1=x+3,*p1++C)p1=x+2,*(p1++)D)p1=x+2,*++p135.下面程序段的输出是C。inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;for(k=01;k4;k++)q[k]=&a[k*3];printf(“%d\n”,q[3][0]);A)8B)16C)20D)输出不合法36.若要对a进行自增运算,则a应具有下面说明D。A)inta[3][2];B)char*a[]={“12”,”ab”};C)char(*a)[3]D)intb[10],*a=b;37.若有定义inta[4][6];则能正确表示a数组中任一元素a[i][j](i,j均在有效范围内)地址的表达式A。A)&a[0][0]+6*i+jB)&a[0][0]+4*j+iC)&a[0][0]+4*i+jD)&a[0][0]+6*j+I38.下面程序的运行结果是B。main(){intx[5]={2,4,6,8,10},*p,**pp;p=x,pp=&p;printf(“%d”,*(p++));printf(“%3d”,**pp);}A)44B)24C)22D)4639.若有定义intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*p)[3]=x;则能够正确表示数组元素x[1][2]的表达式是D。A)*((*p+1)[2])B)(*p+1)+2C)*(*(p+5))D)*(*(p+1)+2)40.若有说明:char*language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则language[2]的值是B。A)一个字符B)一个地址C)一个字符串D)一个不定值41.设有定义:char*cc[2]={“1234”,”5678”};则正确的叙述是A。A)cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址C)cc是指针变量,它指向含有两个数组元素的字符型一维数组D)cc元素的值分别维”1234”和”5678”42.已有定义int(*p)();指针p可以B。A)代表函数的返回值B)指向函数的入口地址C)表示函数的类型D)表示函数返回值的类型43.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是A。A)p=max;B)p=max(a,b);C)*p=max;D)*p=max(a,b);44.若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是C或p(a,b)。A)(*p)max(a,b)B)*pmax(a,b);C)(*p)(a,b);D)*p(a,b);45.以下正确的叙述是C。A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定B)C语言允许main函数带形参,形参名只能是argc和argvC)当main函数带有形参时,传给形参的值只能从命令行中得到D)若有说明:intmain(intargc,char**argv),则argc的值必须大于1三.程序阅读题1.写出下面程序的运行结果。5func(char*s,chara,intn){intj;*s=a;j=n;while(*ss[j])j--;returnj;}main(){charc[6];inti;for(i=1;i=5;i++)*(c+1)=’A’+i+1;printf(“%d\n”,func(c,’E’,5));}2.写出下面程序的运行结果。6fun(char*s){char*p=s;while(*p)p++;return(p-s);

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功