指针题库.docx
《指针题库.docx》由会员分享,可在线阅读,更多相关《指针题库.docx(36页珍藏版)》请在冰豆网上搜索。
指针题库
第五章指针
一、选择题
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】函数名