指针题库.docx
- 文档编号:23657224
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:36
- 大小:35.84KB
指针题库.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】函数名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 题库