第五章指针.docx
《第五章指针.docx》由会员分享,可在线阅读,更多相关《第五章指针.docx(17页珍藏版)》请在冰豆网上搜索。
第五章指针
第五章指针、结构体与共用体
5.1选择题1.C2.D3.A4.A5.C6.D7.C8.A9.C10.D11.C12.B13.B14.C15.B16.D17.C18.A19.B20.C21.D22.D23.D24.C25.D26.C27.A28.C29.A30.B31.
(1)C
(2)A(3)A(4)C(5)C32.D33.
(1)D
(2)B(3)A34.C35.C36.A37.B38.A39.
(1)A
(2)C(3)D(4)B40.D41.B42.D43.A44.B45.C46.A47.A48.D49.A50.D51.C52.B53.A54.B
1.下列定义中不正确的是_____。
A.int*p,**q;B.intp[n];C.int*p(n);D.int(*p)();2.已知p、p1为指针变量,a为数组名,i为整型变量,下列赋值语句中不正确的是_____。
A.p=&i,p=p1;B.p=a;C.p=&a[i];D.p=10;
3.经过下面的语句inti,a[10],*p;定义后,下列语句中合法的是_____。
A.p=a+2;B.p=a[5];C.p=a[2]+2;D.p=&(i+2);
4.两个指针变量不可以_____。
A.相加B.比较C.相减D.指向同一地址5.若已定义x为int类型变量,下列语句中说明指针变量p的正确语句是_____。
A.intp=&x;B.int*p=x;C.int*p=&x;D.*p=*x;6.关于指针概念说法不正确的是_____。
A.一个指针变量只能指向同一类型的变量B.一个变量的地址称为该变量的指针C.只有同一类型变量的地址才能放到指向该类型变量的指针变量之中D.指针变量可以由整数赋,不能用浮点数赋7.设有说明int(*ptr)[M];,其中标识符ptr是_____。
A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M个整型元素的一维数组的指针
D.具有M个指针元素的一维指针数组,每个元素都只能指向整型量8.下面选择中正确的赋值语句是(设chara[5],*p=a;)_____。
A.p="abcd";B.a="abcd";C.*p="abcd";D.*a="abcd";9.定义由n个指向整型数据的指针组成的数组p,其正确的方式为_____。
A.intp;B.int(*p)[n];C.int*p[n];D.int(*p)();
10.具有相同类型的指针类型变量p与数组a,不能进行的操作是_____。
A.p=a;B.*p=a[0];C.p=&a[0];D.p=&a;
11.以下正确的定义和语句是_____。
A.inta[10],*p;char*s;p=a;s=a;B.doublea[5][3],b[5][3],*s;s=a;b=a;C.floata[5][3],*p[3];p[0]=a[0];p[2]=a[4];D.inta[5][3],(*pb)[5],(*pp)[3];pb=a;pp=a;12.若有下列定义,则对a数组元素地址的正确引用是_____。
inta[5],*p=a;A.&a[5]B.p+2C.a++D.&a
13.若有下列定义和语句,则对a数组元素的非法引用是_____。
inta[2][3](*pt)[3];pt=a;A.pt[0][0]B.*(pt+1)[2]C.*(pt[1]+2)D.*(a[0]+2)
14.若有下列定义,则对a数组元素的正确引用是_____。
inta[5],*p=a;A.*(p+5)B.*p+2C.*(a+2)D.*&a[5]
15.若有下列定义和语句,则对a数组元素的非法引用是_____。
inta[2][3],*prt[2],i;for(i=0;i<2;i++)prt[i]=a[i];A.ptr[0][0]B.*(a+1)[2]C.*(ptr[1]+2)D.*(&a[0][0]+2)
16.以下程序段:
char*alp[]={"ABC","DEF","GHI"};inti;puts(alp[1]);的输出结果是_____。
A.AB.ADGC.ABCD.DEF17.下面各语句行中,能正确进行赋字符串操作的是_____。
A.chars[5]="{′a′,′b′,′c′,′d′,′e′}B.char*s;gets(s);C.char*s;s="NOPQRS";D.chars[5];scanf("%s",&s);18.设有以下语句:
charstr[4][12]={"aaa","bbb","ccc","ddd"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];若0≤k<4,下列选项中对字符串的非法引用是_____。
A.strpB.str[k]C.strp[k]D.*strp
18.若有inta[][]={{1,2},{3,4}};则*(a+1),*(*a+1)的含义分别为_____。
A.非法,2B.&a[1][0],2C.&a[0][1],3D.a[0][0],4
20.若有以下的定义、说明和语句,则值为101的表达式是_____。
structwc{inta;int*b;}*p;intx0[]={11,12},x1[]={31,32};staticstructwcx[2]={100,x0,300,x1};p=x;A.*p->bB.p->aC.++p->aD.(p++)->a
21.若有以下的说明、定义和语句,则值为31的表达式是_____。
structwc
{inta;
int*b;
}*p;
intx0[]={11,12},x1[]={31,32};staticstructwcx[2]={100,x0,300,x1};p=x;A.*p->bB.(++p)->aC.*(p++)->bD.*(++p)->b
22.typedeflongintBIGGY;的作用是_____。
A.建立了一种新的数据类型B.定义了一个整型变量C.定义了一个长整型变量D.说明了一个新的数据类型标识符
23.设有以下语句:
structst{intn;structst*next;};staticstructsta[3]={5,&a[1],7,&a[2],9,′\0′},*p;p=&a[0];则值为6的表达式是_____。
A.p++->nB.p->n++C.(*p).n++D.++p->n24.若有定义:
char*p1,*p2,*p3,*p4,ch;则不能正确赋值的程序语句为_____。
A.p1=&ch;scanf("%c",p1);B.p2=(char*)malloc
(1);scanf("%c",p2);C.*p3=getchar();D.p4=&ch;*p4=getchar();25.若有以下定义和语句,且0≤i<10,则对数组元素地址的正确表示是_____。
inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;A.&(a+1)B.a++C.&pD.&p[i]
26.已知职工记录描述为:
structworkers
{intno;
charname[20];
charsex;
struct
{intday;
intmonth;
intyear;
}birth;
};
structworkersw;设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是_____。
A.day=25;B.w.day=25;month=10;w.month=10;year=1993;w.year=1993;C.w.birth.day=25;D.birth.day=25;w.birth.month=10;birth.month=10;w.birth.year=1993;birth.year=1993;
27.当定义一个结构体变量时,系统分配给它的内存是_____。
A.各成员所需内存量的总和B.成员中占内存量最大者所需的容量
C.结构中第一个成员所需内存量D.结构中最后一个成员所需内存量
29.设有如下定义:
structsk{
inta;floatb;}data,*p;若要使p指向data中的a域,正确的赋值语句是_____。
A.p=(structsk*)&data.a;B.p=(structsk*)data.a;C.p=&data.a;D.*p=data.a;30.以下对枚举类型名的定义中正确的是_____。
A.enuma={sum,mon,tue};B.enuma{sum=9,mon=-1,tue};C.enuma={"sum","mon","tue"};D.enuma{"sum","mon","tue"};
31.以下程序找出数组中最大值和此元素的下标,数组元素的值由键盘输入,请从对应的一组选择项中,选择正确的填入。
#include"stdio.h"main(){inta[10],*p,*s,i;for(i=0;i<10;i++)scanf("%d",___
(1)___);for(p=a,s=a;___
(2)___<10;p++)if(*p>*s)s=___(3)___;printf("max=%d,index=%d\n",___(4)___,___(5)___);
}
(1)A.*(a+i)B.p+iC.a+iD.a[i]
(2)A.p-aB.s-aC.a-pD.a-s(3)A.pB.a[p]C.a[s]D.a-p(4)A.a[p-a]B.a[p]C.*sD.a[s](5)A.p-aB.pC.s-aD.a-s
32.以下程序输出结果是_____。
#include"stdio.h"main(){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,6
33.以下程序输出两个整数中大的那个数,两个整数由键盘输入。
请从对应的一组选择项中,选择正确的填入_____。
#include"stdio.h"main(){inta,b,*p1,*p2;p1=___
(1)___malloc(sizeof(int));p2=___
(1)___malloc(sizeof(int));
scanf("%d%d",___
(2)___);if(*p2>*p1)*p1=*p2;free(p2);printf("max=%d\n",___(3)___);}
(1)A.intB.int*C.(int)D.(int*)
(2)A.*p1,*p2B.p1,p2C.&p1,&p2D.&a,&b(3)A.*p1B.*p2C.p1D.p2
34.在以下定义中:
int(*prt)[3];标识符prt_____。
A.定义不合法B.是一个指针数组名,每个元素是一个指向整数变量的指针C.是一个指针,它指向一个具有三个元素的一维数组D.是一个指向整型变量的指针
35.与以下定义等价的是_____。
int*p[4];A.intp[4];B.int*p;C.int*(p[4]);D.int(*p)[4];36.若有如下定义,且0≤i<4,则错误的赋值是_____。
inta[4][10],*p,*q[4];
A.p=a;B.q[i]=a[i];C.p=a[i];D.q[i]=&a[2][0];37.若有定义:
inta[4][10];则以下选项中对数组元素a[i][j]的错误引用是_____。
(此处0≤i<4,0≤j<10)A.*(&a[0][0]+10*i+j)B.*(a+i)[j]C.*(*(a+i)+j)D.*(a[i]+j)38.若有定义:
inta[4][3],b[3][4],(*prt)[3];且0≤i<3,则正确的赋值语句是_____。
A.prt=a;B.prt=b;C.prt=b[i];D.prt=a[i];39.以下程序建立一个如下所示的二维数组,并按以下格式输出。
请从对应的一组选择项中,选择正确的填入_____。
1000101010001000101010001#include"stdio.h"main(){inta[5][5]={0},*p[5],i,j;for(i=0;i<5;i++)p[i]=___
(1)___;for(i=0;i<5;i++){*(p[i]+___
(2)___)=1;*(p[i]+5-___(3)___)=1;}for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%2d",p[i][j]);___(4)___;}}
(1)A.&a[i][0]B.&a[i][1]C.&p[i]D.&a[0][i]
(2)A.0B.1C.iD.(i+1)
(3)A.0B.1C.iD.(i+1)(4)A.putchar("\n")B.putchar(′\n′)C.putchar(′\0′)D.printf(′\n′)
40.以下程序的输出结果是_____。
#include"stdio.h"main(){inta[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;for(i=0;i<4;i++)p[i]=&a[i*3];printf("%d\n",p[3][2]);}A.输出项不合法,输出结果不定B.6C.8D.12
41.以下程序输出结果是_____。
#include"stdio.h"main(){inta[20],*p[4],i,k=0;for(i=0;i<20;i++)a[i]=i;for(i=0;i<4;i++)p[i]=&a[i*(i+1)];for(i=0;i<4;i++)k+=p[i][i];printf("%d\n",k);}A.数组元素引用不合法,输出结果不定B.26C.10D.6
42.若在C程序中有以下定义和语句,则以下各组中的表达式都是对a数组元素正确引用的是_____。
(其中0≤i<4,0≤j<3)main(){inta[4][3]={0},(*ptr)[3],i,j;ptr=a;…}A.a[i][j],a[i]+j,*(*(a+i)+j)B.*(ptr+i)[j],prt[i]+j,*(*(prt+i)+j)C.*(ptr+i)[j],*(a+i)[j],*(ptr+i)D.ptr[i][j],*(ptr[i]+j),*(a[i]+j)43.若有以下定义和语句,则对a数组元素错误引用的是_____。
inta[12]={0},*p[3],**pp,i;for(i=0;i<3;i++)p[i]=&a[i*4];pp=p;A.a[12]B.p[2][3]C.a[10]D.pp[0][1]
44.若在C程序中有以下定义和语句,则以下各组中的表达式全部都是a数组元素的地址的是_____。
(其中0≤i<4,0≤j<3)A.&a[i][j],p[i]+j,pa[i][j]B.*(pa+i)+j,p[i],*(p+i)+jC.&a[j],&p[i],*(*(pa+i)+j)D.**pa,a,pmain(){inta[4][3]={0},*p[4],**pa,i,j;for(i=0;i<4;i++)p[i]=a[i];pa=p;…}45.以下程序的输出结果为_____。
main(){inta[2]={10,20};int*pa=&a[0],*pb=&a[1];*pa=*(pb-1)+5;*(pa+1)=*pa-5;printf("%d,%d\n",a[0],a[1]);}A.2,5B.2,0C.5,0D.1,046.在下列程序段中,枚举变量c1,c2的值依次是_____,_____。
enumcolor{red,yellow,blue=4,green,white}c1,c2;c1=yellow;c2=white;printf("%d,%d\n",c1,c2);A.1,6B.2,5C.1,4D.2,6
47.下列语句执行后的结果是_____。
y=5;p=&y;x=*p++;A.x=5,y=5B.x=5,y=6C.x=6,y=5D.x=6,y=648.变量p为指针变量,若p=&a,下列说法不正确的有_____。
A.&*p==&aB.*&a==aC.(*p)++==a++D.*(p++)==a++
49.有以下程序:
main(){inta,*p;p=&a;a=100;printf("a=%d*p=%d*&a=%d&*p=%u",a,*p,*&a,&*p);a++;printf("a++=%d",a);(*p)++;printf("(*p)++=%d",*p);*p++;printf("*p++=%d\n",*p);}该程序运行结果为_____。
A.a=100*p=100*&a=100&*p=65498a++=101(*p)++=102*p++=-24B.a=100*p=100*&a=100&*p=65498a++=101(*p)++=102*p++=102C.a=100*p=100*&a=65498&*p=65498a++=101(*p)++=102*p++=-24D.a=100*p=100*&a=100&*p=65498a++=101(*p)++=101*p++=-24
50.以下程序执行的结果是_____。
point(char*pt);main(){charb[4]={′a′,′c′,′s′,′f′},*pt=b;point(pt);printf("%c\n",*pt);}point(char*p){p+=3;}A.sB.cC.fD.a51.以下程序的运行结果为_____。
char*c[]={"ENTER","NEW","POINT","FIRST"};char**cp[]={c+3,c+2,c+1,c};char***cpp=cp;main(){printf("%s\n",**++cpp);}A.ENTERB.NEWC.POINTD.FIRST52.以下程序的输出结果为_____。
#includemain(){chars[]="123",*p;p=s;printf("%c%c%c\n",*p++,*p++,*p++);}A.123B.321C.213D.31253.以下程序的执行结果为_____。
structs1{char*s;inti;structs1*sip;};main(){staticstructs1a[]={{"abcd",1,a+1},{"efgh",2,a+2},{"ijkl",3,a}};structs1*p=a;inti=0;printf("%s%s%s",a[0].s,p->s,a[2].sip->s);printf("%d%d",i+2,--a[i].i);printf("%c\n",++a[i].s[3]);}A.abcdabcdabcd20eB.abcdefghijkl20eC.abcdabcdijkl21eD.abcdabcdabcd21e
54.执行下面的语句组后,*a、*p、**p、*pp、**pp的值分别为_____。
inta[]={0,1,2,3,4};int*p[]={a,a+1,a+2,a+3,a+4};int**pp=p;A.0,0,0,0,0B.0,数组a的首地址,0,数组a的首地址,0C.0,1,2,3,4D.0,数组a的首地址,0,数组p的首地址,0选择题答案
1.C2.D3.A4.A5.C6.D7.C8.A9.C10.D11.C12.B13.B14.C15.B16.D17.C18.A19.B20.C21.D22.D23.D24.C25.D26.C27.A28.C29.A30.B31.
(1)C
(2)A(3)A(4)C(5)C32.D33.
(1)D
(2)B(3)A34.C35.C36.A37.B38.A39.
(1)A
(2)C(3)D(4)B40.D41.B42.D43.A44.B45.C46.A47.A48.D49.A50.D51.C52.B53.A54.B
5.2写出程序运行结果
1.以下语句段的输出结果是_____。
#include"stdio.h"
main()
{char*alp[]={"ABC","DEF","GHI"};inti;for(i=0;i<3;i++)puts(alp[i]);
}
2.若有以下的说明和语句,已知int类型占两个字节,则以下的输出结果为_____。
main()
{structst
{chara[10];
intb;
doublec;
};
printf