您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > C语言指针习题--附答案
一、选择题1.变量的指针,其含义是指该变量的_________.a)值b)地址c)名d)一个标志2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point3.若有说明;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;4.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________.main(){int*p,*q,a,b;p=&a;printf(“inputa:”);scanf(“%d”,*p);……}a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5.已有变量定义和函数调用语句:inta=25;print_value(&a);下面函数的正确输出结果是________.voidprint_value(int*x){printf(“%d\n”,++*x);}a)23b)24c)25d)266.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A)*p=&a;scanf(%ld,p);B)p=(long*)malloc(8);scanf(%ld,p);C)scanf(%ld,p=&a);D)scanf(%ld,&a);7.有以下程序#includestdio.hmain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(%d,%d,%d,%d\n,m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,28.有以下程序main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(%d\n,c);}执行后的输出结果是A)1B)2C)3D)49.有以下程序main(){inta,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf(%d\n,a);}程序运行后的输出结果是()A)4B)1C)0D)运行时出错,无定值10.在16位编译系统上,若有定义inta[]={10,20,30},*p=&a;,当执行p++;后,下列说法错误的是()A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与a+1等价11.有以下程序段inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()A)5B)6C)8D)912.若有以下定义,则对a数组元素的正确引用是_________.inta[5],*p=a;a)*&a[5]b)a+2c)*(p+5)d)*(a+2)13.若有以下定义,则p+5表示_______.inta[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设已有定义:inta[10]={15,12,7,31,47,20,16,28,13,19},*p;下列语句中正确的是()A)for(p=a;a(p+10);a++);B)for(p=a;p(a+10);p++);C)for(p=a,a=a+10;pa;p++);D)for(p=a;ap+10;++a);15.有以下程序段#includestdio.hintmain(){intx[]={10,20,30};int*px=x;printf(%d,,++*px);printf(%d,,*px);px=x;printf(%d,,(*px)++);printf(%d,,*px);px=x;printf(%d,,*px++);printf(%d,,*px);px=x;printf(%d,,*++px);printf(%d\n,*px);return0;}程序运行后的输出结果是()A)11,11,11,12,12,20,20,20B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20D)20,10,11,20,11,12,20,2016.设有如下定义:intarr[]={6,7,8,9,10};int*ptr;ptr=arr;*(ptr+2)+=2;printf(%d,%d\n,*ptr,*(ptr+2));则程序段的输出结果为A)8,10B)6,8C)7,9D)6,1017.若有定义:inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______.*(a+5)的值是_________.18.若有以下说明和语句,intc[4][5],(*p)[5];p=c;能正确引用c数组元素的是______.A)p+1B)*(p+3)C)*(p+1)+3D)*(p[0]+2))19.若有定义:inta[2][3],则对a数组的第i行j列元素地址的正确引用为______.a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j20.若有以下定义:inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.*(*(a+1)+0)的值是________.21.有以下定义chara[10],*b=a;不能给数组a输入字符串的语句是()A)gets(a)B)gets(a[0])C)gets(&a[0]);D)gets(b);22.下面程序段的运行结果是_________.char*s=abcde;s+=2;printf(%d,s);a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()A)chars[10]=abcdefg;B)chart[]=abcdefg,*s=t;C)chars[10];s=abcdefg;D)chars[10];strcpy(s,abcdefg);24.设已有定义:char*st=howareyou;下列程序段中正确的是()A)chara[11],*p;strcpy(p=a+1,&st[4]);B)chara[11];strcpy(++a,st);C)chara[11];strcpy(a,st);D)chara[],*p;strcpy(p=&a[1],st+2);25.有以下程序main(){chara[]=programming,b[]=language;char*p1,*p2;inti;p1=a;p2=b;for(i=0;i7;i++)if(*(p1+i)==*(p2+i))printf(%c,*(p1+i));}输出结果是()A)gmB)rgC)orD)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);27.以下正确的程序段是_________.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]);28.若有说明语句chara[]=Itismine;char*p=Itismine;则以下不正确的叙述是________.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是_______.#includestdio.h#includestring.hmain(){char*s1=AbDeG;char*s2=AbdEg;s1+=2;s2+=2;printf(%d\n,strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值30.有以下程序voidf(int*x,int*y){intt;t=*x;*x=*y;*y=t;}main(){inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(*p!=*q){f(p,q);p++;q--;}for(i=0;i8;i++)printf(%d,,a[i]);}程序运行后的输出结果是______。A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,C)1,2,3,4,5,6,7,8,D)8,7,6,5,4,3,2,1,31.已定义以下函数fun(int*p){return*p;}该函数的返回值是A)不确定的值B)形参p中存放的值C)形参p所指存储单元中的值D)形参p的地址值32.有以下程序intf(intb[][4]){inti,j,s=0;for(j=0;j4;j++){i=j;if(i2)i=3-j;s+=b[i][j];}returns;}main(){inta[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};printf(%d\n,f(a));}执行后的输出结果是A)12B)11C)18D)1633.若有以下函数首部intfun(doublex[10],int*n)则下面针对此函数的函数声明语句中正确的是A)intfun(doublex,int*n);B)intfun(double,int);C)intfun(double*x,intn);D)intfun(double*,int*);34.有以下程序voidsum(int*a){a[0]=a[1];}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=2;i=0;i--)sum(&aa[i]);printf(%d\n,aa[0]);}执行后的输出结果是()A)4B)3C)2D)135.下段代码的运行结果是:intmain(){chara;char*str=&a;strcpy(str,hello);printf(str);return0;}A)helloB)nullC)hD)发生异常36.下段程序的运行结果是:voidmain(){char*p,*q;charstr[]=Hello,World\n;q=p=str;p++;print(q);print(p);}voidprint(char*s){printf(“%s”,s);}A)HeB)Hello,Worldello,WorldC)Hello,WorldHello,WorldD)ello,Worldell,World37.有以下程序voidfun(char*c,intd){*c=*c+1;d=d+1;printf(%c,%c,,*c,d);}voidmain(){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,b38、下面选项属于函数指针的是:A、(int*)p(int,int)B、int*p(int,int)C、两者都是D、两者都不是39、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是_______.A)(*p)max(a,b);B)*pmax(a,b);C)(*p)(a,b);D)*p(a,b);40、下面几个选项中的代码能通过编译的是:A)int*fun(){ints[3]={1,3,4};;returns;}in
本文标题:C语言指针习题--附答案
链接地址:https://www.777doc.com/doc-5251314 .html