六指针选择题答案Word格式.docx
- 文档编号:6908680
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:20
- 大小:20.98KB
六指针选择题答案Word格式.docx
《六指针选择题答案Word格式.docx》由会员分享,可在线阅读,更多相关《六指针选择题答案Word格式.docx(20页珍藏版)》请在冰点文库上搜索。
p2
D.p1=p2
两个指针变量可以相减(结果表示介于二者之间元素的个数),可以比较大小,但不能相加。
186.以下叙述错误的是(D)。
A.存放地址的变量称为指针变量
B.NULL可以赋值给任何类型的指针变量
C.一个指针变量只能指向类型相同的变量
D.两个相同类型的指针变量可以作加减运算
D两个相同类型的指针变量相加没有意义,所以不可以作加运算,所以D错。
187.以下程序段运行后,表达式*(p+4)的值为(B)。
chara[]="
china"
;
char*p;
p=a;
A.'
n'
B.'
a'
C.存放'
的地址
D.存放'
a是一维数组名,表示数组首地址,即等价于&
a[0]
因为p=a;
即p=&
a[0],所以*p等价于a[0]
所以p+i等价于a+i,而a+i是a[i]的地址,*(a+i)等价于a[i]
所以*(p+i)等价于a[i]
*(p+4)=a[4]=’a’
188.以下程序段运行后,表达式*(p++)的值为(A)。
chara[5]="
work"
char*p=a;
w'
B.存放'
C.'
o'
printf("
%3d\n"
(*p)++);
/*先输出*p,再进行(*p)++*/
printf("
*p++);
/*先输出*p,再进行p++*/
*++p);
/*先进行++p,再输出*p*/
++*p);
/*先进行++(*p),再输出*p*/
*(p++)的值等于*p,然后p++
因为p等于a所以*p等于a[0]
189.若有定义:
int*p,k=4;
p=&
k;
以下均代表地址的是(C)。
A.k,p
B.&
k,&
p
C.&
k,p
D.k,*p
A.k不是地址
B.k,p都是变量所以&
p都代表地址(&
p是指针变量p的地址),所以B也是正确的
C.&
k和p都是代表变量k的地址,所以C正确
D.K,*p都等于4,都不是地址
190.若有定义:
double*q,p;
则能给输入项读入数据的正确程序段是(B)。
A.q=&
p;
scanf("
%lf"
*q);
B.q=&
q);
C.*q=&
D.*q=&
根据课本P37,调用scanf函数的语法格式为:
scanf(格式控制字符串,地址列表);
所以
A.*q不是地址,所以A错
B.因为q=&
p,即q等于p的地址,所以B正确
C.D.*q=&
p错误
191.若已定义:
intq=5;
对①int*p=&
q;
和②p=&
这两条语句理解错误的是(C)。
A.①是对p定义时初始化,使p指向q;
而②是将q的地址赋给p
B.①和②中的&
q含义相同,都表示给指针变量赋值
C.①是对p定义时初始化,使p指向q;
而②是将q的值赋给p所指向的变量
D.①和②的执行结果都是把q的地址赋给p
1int*p=&
是对p定义时初始化,使p的值等于q的地址
2p=&
是将q的地址赋值给p.
C中②理解错误。
应该是将q的地址赋值给p.
192.下面语句错误的是(A)。
A.int*p;
*p=20;
B.char*s="
abcdef"
%s\n"
s);
C.char*str="
str++;
D.char*str;
str="
见课本P153,未经赋值的指针变量其值是随机的,可能指向系统或其他已使用的数据区,对它进行写入操作将可能出现不可预知的情况,严重时将造成系统混乱,甚至死机。
A没有对P赋值,就执行*p=20;
对p所指向的单位进行写操作,可能会造成不可预知的错误,所以A错。
193.若有定义inta[2][3],*p=a;
,则能表示数组元素a[1][2]地址的是(D)。
A.*(a[1]+2)
B.a[1][2]
C.p[5]
D.p+5
A.a[1]是第1行的首地址(行号从0开始计算),也是第1行的首个元素(第0个元素)的地址,即&
a[1][0]
a[1]+2是表示从a[1][0]开始往移动2个位置,即a[1][2]的地址,
所以*(a[1]+2)等价于*(&
a[1][2])等价于a[1][2],所以不能选A。
B.显然是错的
D.因为p=a,&
a[i][j]等价于p+i*3+j其中3是数组a的列数
所以&
a[1][2]等价于p+1*3+2,即p+5。
所以答案选D
因为p=a,即p等于a[0][0]的地址(指向a[0][0]),所以p+5是从a[0][0]开始往后偏移5个位置元素的地址,即p+5是a[5]的地址
a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0].....
pp+1p+2p+3p+4p+5p+6.....
194.若已定义:
inta=5,*p;
且p=&
a;
则以下表示中不正确的是(B)。
A.&
a==&
(*p)
B.*(&
p)==a
(*p)==p
D.*(&
a)==a
因为p=&
所以*p==a,所以B错
195.若有以下程序段,则叙述正确的是(C)。
chars[]="
computer"
char*p;
p=s;
A.s和p完全相同
B.数组s的长度和p所指向的字符串长度相等
C.*p与s[0]相等
D.数组s中的内容和指针变量p中的内容相等
A.s是数组名,代表一个固定的地址(指针常量),s的值是不能改变的。
P的是指针变量,可以对p的进行赋值(p的值可程序运行过程中可以修改),所以A错。
B数组长度和字符串长度是两个不同的概念。
数组长度是所有元素个数,chars[]="
数组长度为9(a[8]==’/0’)
字符串商都是指字符串中字符的个数(不包括字符串结束标志/0),p所指向的字符串是"
有8个字符,所以字符串长度为8
所以B错
C.s等价于&
s[0],所以*p等价于s[0],所以答案选C
D.数组s中的内容:
s[0]=’c’,s[1]=’o’,....,s[7]=’r’,s[8]=’\0’
指针变量p中的内容是s,即数组s的首地址(&
s[0]),所以D是错的。
196.以下程序段的运行结果是(B)。
enumweekday{aa,bb=2,cc,dd,ee}week=ee;
printf("
%d\n"
week);
A.ee
B.5
C.2
D.4
课本P277
week是枚举类型变量,它的取值为ee,
因为bb=2,所以cc=3,dd=4,ee=5
以%d格式输出ee,结果为5
197.若有以下程序段,则不能正确访问数组元素a[1][2]的是(A)。
int(*p)[3];
inta[][3]={1,2,3,4,5,6,7,8,9};
p=a;
A.p[1]+2
B.p[1][2]
C.(*(p+1))[2]
D.*(*(a+1)+2)
P是指向一维数组(有3个元素)的指针变量,详细见课本P164——3。
所以p[1]+2等价于a[1]+2,而a[1]+2等价于&
a[1][2],所以p[1]+2等价于&
a[1][2]
所以A错
198.以下程序段的运行结果是(A)。
inta[]={1,2,3,4,5,6,7},*p=a;
intn,sum=0;
for(n=1;
n<
6;
n++)sum+=p[n++];
%d"
sum);
A.12
B.15
C.16
D.27
因为p=a,所以p[n]等价于a[n]
执行for(n=1;
当n=1时满足n<
6所以执行循环体
sum=sum+p[1]=0+2=2,然后n自增1两次,n的值变为3
当n=3时满足n<
sum=sum+p[3]=2+4=6,然后n自增1两次,n的值变为5
当n=5时满足n<
sum=sum+p[5]=6+6=12,然后n自增1两次,n的值变为7
当n=7时不满足n<
6所以结束循环。
最后sum的值为12。
所以答案选A
199.下面程序的运行结果是(A)。
main()
{inta,b;
int*p1=&
a,*p2=&
b,*t;
a=10;
b=20;
t=p1;
p1=p2;
p2=t;
a,b);
A.10,20
B.20,10
C.10,10
D.20,20
因为
int*p1=&
a=10;
所以p1指向变量a,p2指向变量b,
这时候a等于10,b等于20,*p1等于10,*p2等于20
执行t=p1;
后
P1指向变量b,p2指向变量a,
这时候a等于10,b等于20,*p1等于20,*p2等于10
200.以下程序段运行后变量s的值为(C)。
inta[]={1,2,3,4,5,6,7};
inti,s=1,*p;
a[3];
for(i=0;
i<
3;
i++)
s*=*(p+i);
A.6
B.60
C.120
D.210
p=&
p指向a[3]
当i=0时
s=s*(*(p+0))=s*a[3]=1*4=4;
当i=1时
s=s*(*(p+1))=s*a[4]=4*5=20;
当i=2时
s=s*(*(p+2))=s*a[5]=20*6=120;
所以最后s=120,答案选C
201.以下程序段运行后变量ans的值为(B)。
inta[]={1,2,3},b[]={3,2,1};
int*p=a,*q=b;
intk,ans=0;
for(k=0;
k<
k++)
if(*(p+k)==*(q+k))
ans=ans+*(p+k)*2;
A.2
B.4
C.6
D.12
inta[]={1,2,3},b[]={3,2,1};
p指向a[0]q指向b[0]
执行
for(k=0;
当k=0时
*(p+k)=a[k]=a[0]=1
*(q+k)=b[k]=a[0]=3
所以*(p+k)==*(q+k)不成立,
k++,满足k<
3,所以进入下一次循环
当k=1时
*(p+k)=a[k]=a[1]=3
*(q+k)=b[k]=a[1]=1
所以*(p+k)==*(q+k)成立,执行ans=ans+*(p+k)*2;
ans=ans+*(p+k)*2=0+a[k]*2=0+a[1]*2=0+2*2=4
然后k++,满足k<
当k=2时
*(p+k)=a[k]=a[2]=1
*(q+k)=b[k]=a[2]=3
k++,不满足k<
3,所以结束循环
最后ans=4,答案选B
202.以下程序运行结果是(A)。
{chara[]="
abc"
*p;
for(p=a;
p<
a+3;
p++)
%s"
p);
A.abcbcc
B.abc
C.cbabaa
D.cba
是输出p所指向的字符串
a+i等价于&
a[i]
for(p=a;
当p==a时
p指向a[0],所以printf("
输出以地址&
a[0]开始的字符串,即输出”abc”
当p==a+1时
p指向a[1],所以printf("
a[1]开始的字符串,即输出”bc”
当p=a+2时
p指向a[2],所以printf("
a[2]开始的字符串,即输出”c”
所以最后输出结果为:
abcbcc,答案选A
203.以下程序的输出结果是(B)。
#include<
stdio.h>
voidmain()
{inti;
char*s="
ABCD"
s+i);
}
A.CD
BCD
ABCD
B.ABCD
CD
C.AB
ABC
D.ABCD
AB
s+i第i个字符的地址
输出”ABCD”,然后回车换行
输出”BCD”,然后回车换行
输出”CD”,然后回车换行
所以答案选B
204.以下程序的输出结果是(B)。
#include<
{char*p="
ABCDE"
*q=p+3;
%c\n"
q[-2]);
A.A
B.B
C.C
D.D
q[i]等价于*(q+i)
所以q[-2]等价于*(q-2)
因为q=p+3,所以*(q-2)等于*(p+3-2)即*(p+1)即B
答案选B
205.下面程序执行时,若输入54321<
回车>
,则输出为:
B
#defineN5
{inta[N];
while(p<
a+N)
scanf("
p++);
while(p>
a)
%d"
*(--p));
A.54321
B.12345
C.34512
D.32154
int*p=a;
p指向a[0],
while(p<
第一次循环:
把5赋值给a[0],然后p++,(p值变为a+1),p指向a[1]
第二次循环:
把4赋值给a[1],然后p++,(p值变为a+2),p指向a[2]
第三次循环:
把3赋值给a[2],然后p++,(p值变为a+3),p指向a[3]
第四次循环:
把2赋值给a[3],然后p++,(p值变为a+3),p指向a[4]
第五次循环:
把1赋值给a[4],然后p++,(p值变为a+5),不满足p<
a+N结束循环。
while(p>
p的值为a+5,满足p>
a,执行循环体
p自减1(值变为a+4),然后输出*p(输出a[4])
p的值为a+4,满足p>
p自减1(值变为a+3),然后输出*p(输出a[3])
p的值为a+3,满足p>
p自减1(值变为a+2),然后输出*p(输出a[2])
p的值为a+2,满足p>
p自减1(值变为a+1),然后输出*p(输出a[1])
p的值为a+1,满足p>
p自减1(值变为a),然后输出*p(输出a[0])
p的值为a,不满足p>
a,结束循环。
最后输出12345所以答案选B
206.下面程序段的运行结果是(C)。
inta[]={1,2,3,4,5,6},*p=a;
inti,sum=0;
for(i=1;
i++)sum+=*(p++);
A.10
B.12
C.15
D.20
*(p++);
/*先输出*p,再进行p++*/
p指向a[0]
for(i=1;
sum=sum+*p=sum+a[0]=0+1=1;
然后p++,p的值变为a+1,即p指向a[1]
sum=sum+*p=sum+a[1]=1+2=3;
然后p++,p的值变为a+2,即p指向a[2]
当i=3时
sum=sum+*p=sum+a[2]=3+3=6;
然后p++,p的值变为a+3,即p指向a[3]
当i=4时
sum=sum+*p=sum+a[3]=6+4=10;
然后p++,p的值变为a+4,即p指向a[4]
当i=5时
sum=sum+*p=sum+a[4]=10+5=15;
然后p++,p的值变为a+5,即p指向a[5]
最后printf("
输出15,答案选C
207.下面程序运行结果是(D)。
main()
{inta[]={1,2,3,4,5},*p,*q,i;
q=p+4;
5;
%d%d"
*(q-i),*(p+i));
A.24334251
B.51423324
C.15243342
D.42332415
p=a;
p指向a[0]
q=p+4;
q指向a[4]
输出a[3]和a[1],即输出42
输出a[2]和a[2],即输出33
输出a[1]和a[3],即输出25
输出a[0]和a[4],即输出15
最后输出结果:
42332515,所以答案选D
208.下面程序运行结果是(B)。
{staticchara[]="
abcdefg"
b[]="
adcbehg"
char*p=a,*q=b;
inti;
=6;
if(*(p+i)==*(q+i))
%c"
*(q+i));
A.geca
B.aceg
C.bdf
D.Fdb
这个程序的功能是比较数组a和数组b中相同位置上相等的元素是否相等,如果相等则输出该元素。
char*p=a,*q=b;
p指向a[0],q指向b[0]
*(p+i)等价于a[i]
*(q+i)等价于b[i]
for(i=0;
*(p+i)的值为’a’
*(q+i)的值为’a’
满足*(p+i)==*(q+i),所以执行printf("
输出’a’
*(p+i)的值为’b’
*(q+i)的值为’d’
不满足*(p+i)==*(q+i),所以不执行printf("
*(p+i)的值为’c’
*(q+i)的值为’c’
输出’c’
*(p+i)的值为’d’
*(q+i)的值为’b’
*(p+i)的值为’e’
*(q+i)的值为’e’
输出’e’
*(p+i)的值为’g’
*(q+i)的值为’g’
满足*(p+i)==*(q+i),
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 选择题 答案
![提示](https://static.bingdoc.com/images/bang_tan.gif)