指针题库.docx

上传人:b****7 文档编号:23657224 上传时间:2023-05-19 格式:DOCX 页数:36 大小:35.84KB
下载 相关 举报
指针题库.docx_第1页
第1页 / 共36页
指针题库.docx_第2页
第2页 / 共36页
指针题库.docx_第3页
第3页 / 共36页
指针题库.docx_第4页
第4页 / 共36页
指针题库.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

指针题库.docx

《指针题库.docx》由会员分享,可在线阅读,更多相关《指针题库.docx(36页珍藏版)》请在冰豆网上搜索。

指针题库.docx

指针题库

第五章指针

一、选择题

1.以下程序的输出结果是。

#include

voidmain()

{

chara[10]={'1','2','3','4','5','6','7','8','9',0},*p;

inti;

i=8;

p=a+i;

printf("%s\n",p-3);

}

A)6B)'6'C)6789D)789

答案:

C

2.若有语句:

char*line[5];,以下叙述中正确的是______。

A)定义line是一个指针数组,每个数组元素是一个基类型为char的指针变量

B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

C)定义line是一个指针数组,语句中的*号称为间址运算符

D)定义line是一个指向字符型函数的指针

答案:

A

3.设有定义:

intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是

A)*p=*q;B)p=q;C)*p=&n1;D)p=*q;

答案:

A

4.若有定义:

intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是______。

A)随机值B)0C)x的地址D)p的地址

答案:

B

5.有以下程序

#include

voidmain()

{

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;

printf("%d\n",*p+*q);

}

程序运行后的输出结果是______。

A)16B)10C)8D)6

答案:

B

6.有以下程序

#include

voidmain()

{

inta[3][3],*p,i;

p=&a[0][0];

for(i=0;i<9;i++)p[i]=i;

for(i=0;i<3;i++)printf("%d",a[1][i]);

}

程序运行后的输出结果是______。

A)012B)123C)234D)345

答案:

D

 

7.以下语句或语句组中,能正确进行字符串赋值的是______。

A)char*sp;*sp="right!

";B)chars[10];s="right!

";

C)chars[10];*s="right!

";D)char*sp="right!

";

答案:

D

8.设有以下语句:

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->n

答案:

D

9.以下程序的输出结果是

#include

structHAR

{

intx,y;

structHAR*p;

}h[2];

voidmain()

{

h[0].x=1;h[0].y=2;

h[1].x=3;h[1].y=4;

h[0].p=&h[1];h[1].p=h;

printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);

}

A)12B)23C)14D)32

答案:

D

10.有以下程序

#include

structSTU

{

charnum[10];

floatscore[3];

};

voidmain()

{

structSTUs[3]={{"20021",90,95,85},

{"20022",95,80,75},

{"20023",100,95,90}

},*p=s;

inti;

floatsum=0;

for(i=0;i<3;i++)

sum=sum+p->score[i];

printf("%6.2f\n",sum);

}

程序运行后的输出结果是

A)260.00B)270.00C)280.00D)285.00

答案:

B

 

11.有以下程序

#include

#include

structNODE

{

intnum;

structNODE*next;

};

voidmain()

{

structNODE*p,*q,*r;

p=(structNODE*)malloc(sizeof(structNODE));

q=(structNODE*)malloc(sizeof(structNODE));

r=(structNODE*)malloc(sizeof(structNODE));

p->num=10;q->num=20;r->num=30;

p->next=q;q->next=r;

printf("%d\n",p->num+q->next->num);

}

程序运行后的输出结果是

A)10B)20C)30D)40

答案:

D

12.有以下程序

#include

voidmain()

{

charch[2][5]={"693","825"},*p[2];

inti,k,j,s=0;

for(i=0;i<2;i++)

p[i]=ch[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>='0'&&p[i][j]<='9';j+=2)

s=10*s+p[i][j]-'0';

printf("%d\n",s);

}

程序执行后的输出结果是_______。

A)6385B)22

C)33D)693825

答案:

A

13.主函数main(argc,argv)中的参数argv的说明应当为_______。

A)char*argv[];B)charargv[][];

C)charargv[];D)*argv;

答案:

A

14.说明语句“int(*p)()”的含义是_______。

A)p是一个指向一个一维数组的指针变量

B)p是指针变量,它指向一个整型数据的指针

C)p是一个指向函数的指针,该函数的返回值是一个整型

D)以上都不对

答案:

C

15.若有定义:

inta[3][4];不能表示数组元素a[1][1]的是_______。

A)*(a[1]+1)B)*(&a[1][1])

C)(*(a+1)[1])D)*(a+5)

答案:

D

 

16.有以下程序

#include

voidmain()

{

inta[]={1,2,3,4},y,*p=&a[1];

y=(*--p)++;

printf("%d",y);

}

程序执行后的输出结果是_______。

A)1B)2

C)3D)4

答案:

A

17.有以下程序

#include

#include

voidmain()

{

chars1[10],*s2="ab\0cdef";

strcpy(s1,s2);

printf("%s",s1);

}

程序执行后的输出结果是_______。

A)ab\0cdefB)abcdef

C)abD)以上答案都不对

答案:

C

18.下面程序段的运行结果是。

charstr[]="ABC",*p=str;

printf("%d\n",*(p+3));

A)67B)0

C)字符‘C’的地址D)字符‘C’

答案:

B

19.若有程序段:

charstr[]="china";char*p;p=str;则下列叙述正确的是。

A)*p与str[0]相等

B)str数组长度和p所指向的字符串长度相等

C)str和p完全相同

D)数组str中的内容和指针变量p中的内容相等

答案:

A

20.有如下程序段:

int*p,a=10,b=1;

p=&a;a=*p+b;

执行该程序段后,a的值是。

A)12B)11C)10D)编译出错

答案:

B

21.有以下程序:

#include

#include

voidmain()

{

char*p,*q;

p=(char*)malloc(sizeof(char)*20);q=p;

scanf("%s%s",p,q);

printf("%s%s\n",p,q);

}

若从键盘输入:

abcdef<回车>,则输出结果是(2002年9月)

(A)defdef(B)abcdef(C)abcd(D)dd

答案:

A

22.有以下程序:

#include

#include

voidmain()

{

charstr[][20]={"Hello","Beijing"},*p=str[0];

printf("%d\n",strlen(p+20));

}

程序运行后的输出结果是。

A)0B)5C)7D)20

答案:

C

23.下面程序运行后的输出结果是。

#include

#include

voidmain()

{

char*p1,*p2,str[50]="ABCDEFG";

p1="abcd";p2="efgh";

strcpy(str+1,p2+1);

strcpy(str+3,p1+3);

printf("%s",str);

}

A)AfghdEFGB)AbfhdC)AfghdD)Afgd

答案:

D

24.以下程序:

#include

voidmain()

{

char*alpha[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};

char**p;

inti;

p=alpha;

for(i=0;i<4;i++)printf("%s",p[i]);

printf("\n");

}

其输出结果是

A)ABCDEFGHIJKLB)ABCDC)ABCDEFGHIJKLMNOPD)AEIM

答案:

C)

 

25.若有说明:

intj,k=7,*p=&j;

则与j=k;等价的语句是()

A.j=*p;B.*P=*&kC.j=&k;D.j=**p;

答案:

B

26.若有以下定义和语句

#include

inta=4,b=3,*p,*q,*w;

p=&a;q=&b;w=q;q=NULL;

则以下选项中错误的语句是。

(A)*q=0;(B)w=p(C)*p=a;(D)*p=*w;

答案:

A

27.有以下程序

#include

voidf(int*x,int*y)

{

intt;

t=*x;*x=*y;*y=t;

}

voidmain()

{

inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;

p=a;q=&a[7];

while(p

{

f(p,q);

p++;q--;

}

for(i=0;i<8;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,

答案:

D

28.以下正确的程序段是。

A)int*p;B)int*s,k;C)int*s,k;D)int*s,k;

scanf("%d",p);*s=100;char*p,c;char*p,c;

s=&k;s=&k;

p=&c;p=&c;

*p='a';s=p;

*s=1;

答案:

C

29.若有以下定义和语句:

ints[4][5],(*ps)[5];

ps=s;

则对s数组元素的正确引用形式是。

A)ps+1B)*(ps+3)C)ps[0][2]D)*(ps+1)+3

答案:

C

 

30.若指针p已正确定义,其指向如图8.1所示,则执行语句*p++;后,*p的值是

A)20B)30C)21D)31

 

答案:

B)

31.以下程序段的输出结果是:

A)17B)18C)19D)20

inta[]={2,4,6,8,10},y=1,x,*p=&a[1];

for(x=0;x<3;x++)y+=*(p+x);

printf(“%d\n”,y);

答案:

C

32.要求函数的功能是在一维数组中查找值,若找到则返回所在的下标值,否则返回0;数组放在a中。

不能正确执行的函数是。

(A)funa(int*a,intn,intx)(B)funb(int*a,intn,intx)

{*a=x;{intk;

while(a[n]!

=x)n--;for(k=1;k<=n;k++)

returnn;if(a[k]==x)returnk;

}return0;}

(C)func(inta[],intn,intx)(D)fund(inta[],intn,intx)

{int*k;{intk=0;

a[0]=x;k=a+n;do

while(*k!

=x)k--;k++;

returnk-n;while((k

=x));

}if(a[k]==x)returnk;elsereturn0;}

答案:

C

33.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是。

A)chars[10]="abcdefg";B)chart[]="abcdefg",*s=t;

C)chars[10];s="abcdefg";D)chars[10];strcpy(s,"abcdefg");

答案:

C

34.有以下程序

#include

voidmain()

{

chars[]="Yes\n/No",*ps=s;

puts(ps+4);

*(ps+4)=0;

puts(s);

}

程序运行后的输出结果是(选项D中的第一行是空行)。

(2004年9月)

A)n/NOB)/NoC)n/NOD)

YesYesYes/No

/No/NoYes

答案:

B

35.以下程序:

#include

voidmain()

{

inta[5]={2,4,6,8,10},*p,**k;

p=a;k=&p;

printf("%d",*(p++));

printf("%d\n",**k);

}

其输出结果是

A)44B)22C)24D)46

答案:

C)

36.以下程序:

#include

voidmain()

{

intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];

for(i=0;i<2;i++)

{

if(i==0)aa[i][i+1]=*p+1;

else++p;

printf("%d",*p);

}

printf("\n");

}

其输出结果是

A)23B)26C)33D)36

答案:

A)

37.若有定义语句:

int(*p)[M];,其中的标识符p是

A)M个指向整型变量的指针

B)指向M个整型变量的函数指针

C)一个行指针,它指向具有M个整型元素的一维数组

D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量

答案:

C)

38.假设有定义

inti;

intscore[]={98,75,34,88,100};

int*p=score;

能正确地将输入数据送入100所在的存储单元的语句是。

A.scanf("%d",p+4);B.scanf("%d",&(score[4]));

C.scanf("%d",*(p+4));D.scanf("%d",&(p+4));

答案:

A和B

 

39.

假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句是。

(2001年4月)

A)free(q);p->next=q->next;

B)(*p).next=(*q).next;free(q);

C)q=(*q).next;(*p).next=q;free(q);

D)q=q->next;p->next=q;p=p->next;free(p);

答案:

B

40.设有如下定义:

char*aa[2]={"abcd","ABCD"};则以下说法中正确的是。

A)aa数组成元素的值分别是"abcd"和"ABCD"

B)aa是指针变量,它指向含有两个数组元素的一维字符数组

C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

D)aa数组的两个元素中各自存放了字符"a"和"A"的地址

答案:

C

41.若有以下的定义:

structstuc

{

inta;

longb;

charc[5];

}*s;

则以下赋值正确的是(  )。

A)s.c="abcd";B)strcat(s->c,"abcd");

C)s->c="abcd"D)以上均不正确

答案:

B

42.下面程序的输出结果是()。

#include

#include

voidmain()

{

charp1[20]="xyz",p2[20]="ijh",str[20]="abc";

strcpy(p1+1,p2+1);

strcat(str+1,p1);

printf("%s",str);

}

A)abcxyzijhB)abcxjh

C)abcxijhD)xyzijh

答案:

B

 

43.下面程序的输出结果是()。

inta[2][3]={1,2,3,4,5,6},*p[2],i;

for(i=0;i<2;++i)*(p+i)=a[i];

for(i=0;i<3;i++)printf("%d",*(*(p+1)+i));

A)编译出错,无法运行B)345

C)234D)456

答案:

D

44.如下程序的输出结果是()。

#include

voidmain()

{

staticinta[4]={1,2,3,4};

int**k,*j;

j=a+1;k=&j;

printf("%d\n",*(*k+2));

}

A)运行错误B)4C)3D)2

答案:

B

45.设有如下定义:

structstuc

{

intx;

doubley;

}stucl,*ph;

若有ph=&stuc1,则对stuc中的y域的正确引用是()。

A)(*ph).stuc1.yB)(*ph).y

C)ph->stuc1.yD)ph.stuc1.y

答案:

B

46.对于下述说明,不能使变量p->b的值增1的表达式是()。

structexm

{

inta;

intb;

floatc

}*p;

A)++p->bB)++(p++)->b

C)p->b++D)(++p)->b++

答案:

D

二、填空题

1.假设有语句j=3,jp=&j;,则jp的值为_【_1_】_,*jp的值为_【_2_】_。

答案:

【1】变量j的地址;【2】3

2.设jp是指向变量j的指针变量,则语句*jp=3;和语句j=3;的作用是相同的,即*jp代表变量j。

此说法正确吗?

_【_1_】_。

答案:

【1】正确

3.运算符&、*、++、--的优先级别相同,但按自右而左方向结合,故表达式*p++的值和表达式(*p)++的值是_【_1_】_,表达式*++p和++*p的作用是_【_2_】_。

答案:

【1】相同的;【2】不同的

4.指针变量可以作为函数的参数,其作用是传递或接受一个变量的_【_1_】_。

答案:

【1】地址

5.可以通过指向数组的指针变量来访问一个数组元素,且可以带下标,所以p[i]与*(p+i)是等价的。

此说法正确吗?

_【_1_】_。

答案:

【1】正确

6.定义p为指向整型数据的指针变量的指针变量的语句为_【_1_】_。

答案:

【1】int**p;

7.设p为指针数组,它由n个指向整型数据的指针元素组成,则定义语句为_【_1_】_。

答案:

【1】int*p[n];

8.设p为指针变量,它指向包含n个整型数据元素的一维数组,则定义语句为_【_1_】_。

答案:

【1】int(*p)[n];

9.语句int*p(){};表明函数名为_【_1_】_,函数返回值为_【_2_】_。

答案:

【1】p;【2】一个整型数据的地址

10.语句int(*p)();表明p为指向_【_1_】_的指针,函数返回值为_【_2_】_。

答案:

【1】函数;【2】一个整型数据

11.在C程序中可以用两种方法实现一个字符串,一是用_【_1_】_实现,二是用_【_2_】_实现。

答案:

【1】字符数组;【2】字符指针

12.C语言对语句char*string="Hello!

";中的字符串常量是按_【_1_】_处理的,并将_【_2_】_赋给字符指针变量string。

答案:

【1】字符数组;【2】字符数组的首地址

13.可以通过字符数组名或_【_1_】_对一个字符串进行整体的输入输出。

答案:

【1】字符指针变量

14.定义charstr[14],*sp;,则语句str[]="Hello!

";正确吗?

_【_1_】_。

语句sp="Hello!

";正确吗?

_【_2_】_。

答案:

【1】不正确;【2】正确

15.一个函数在编译时被分配一个,这个入口地址就称之为函数的_【_1_】_。

答案:

【1】指针

16.函数的调用可以通过函数名调用,也可以通过函数_【_1_】_调用。

答案:

【1】指针

17.在给函数指针变量赋值时,只需给出_【_1_】_而不必给出参数。

答案:

【1】函数名

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1