![六指针_选择题(答案)_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-10/30/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e1.gif)
![六指针_选择题(答案)_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-10/30/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e2.gif)
![六指针_选择题(答案)_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-10/30/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e3.gif)
![六指针_选择题(答案)_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-10/30/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e/fc9078a6-db95-44e3-a6bd-8b8d501d5f4e4.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习必备欢迎下载六、指针183. 下程序的运行结果是(A )。void ast (int x,int y,int *cp,int *dp) *cp=x+y; *dp=x-y;main() int a=4,b=3,c,d; ast(a,b,&c,&d);printf("%d,%dn",c,d);A. 7,1B. 1,7C. 7,-1D. c、 d 未赋值,编译出错执行ast(a,b,&c,&d); 调用 ast 函数,把 a 传递给 x,b 传递给 y,c的地址传递给 cp,d 的地址传递给 dp.因为 cp=&c(cp 的值为 c 变
2、量的地址 ),所以 *cp 等价于 c,执行 *cp=x+y ;后 c=4+3=7同理,因为 dp=&d, 所以 *dp 等价于 d,执行 *dp=x-y ;后 d=4-3=1执行printf("%d,%dn",c,d); 后输出 7,1184. 有以下语句:int a5=0,1,2,3,4,5,i;int *p=a;设 0 i 5,对 a 数组元素不正确的引用是(C )。A. *(&ai)B. ap-aC. *(*(a+i)D. pi1.指针运算符取地址运算符 &: 其功能是取变量的地址。学习必备欢迎下载2.取内容运算符 *: 用来表示指针变量所指
3、的变量。在* 运算符之后跟的变量必须是指针变量。A .*(&ai)等价于 aiB. ap-a等价于 a0C.因为 *(a+i)等价于 ai所以*(*(a+i) 等价于 *(ai) ,又因为在 * 运算符之后跟的变量必须是指针变量,我们断定 *ai 是错的,所以 * (*(a+i) )也是错。D.因为 P=a,所以 Pi等价于 ai185.若有定义int *p1,*p2;则错误的表达式是(A )。A. p1+p2B. p1-p2C. p1<p2D. p1=p2两个指针变量可以相减(结果表示介于二者之间元素的个数),可以比较大小, 但不能相加。186. 以下叙述错误的是( D )。A
4、. 存放地址的变量称为指针变量B. NULL 可以赋值给任何类型的指针变量C. 一个指针变量只能指向类型相同的变量D. 两个相同类型的指针变量可以作加减运算D 两个相同类型的指针变量相加没有意义,所以不可以作加运算,所以187.以下程序段运行后,表达式*(p+4) 的值为(B )。D 错。char a="china"char *p;p=a;A.'n'B.'a'C.存放 'n' 的地址D.存放 'a' 的地址a 是一维数组名,表示数组首地址,即等价于&a0因为 p=a; 即 p=&a0 ,所以 *
5、p 等价于 a0因为 p=a; 所以 p+i 等价于 a+i, 而 a+i 是 ai的地址, * ( a+i)等价于 ai 所以 * ( p+i )等价于 ai*(p+4)=a4=学习必备欢迎下载188.以下程序段运行后,表达式*(p+) 的值为(A )。char a5="work"char *p=a;A. 'w'B. 存放 'w' 的地址C. 'o'D. 存放 'o' 的地址printf( "%3dn", (*p)+ );printf( "%3dn", *p+ );pr
6、intf( "%3dn", *+p );printf( "%3dn", +*p );*(p+)的值等于 *p , 然后 p+因为 p 等于 a 所以 *p 等于 a0/* 先输出 *p ,再进行 (*p)+ */* 先输出 *p ,再进行p+ */* 先进行 +p,再输出 *p */* 先进行 +(*p) ,再输出 *p */189.若有定义:int *p,k=4; p=&k;以下均代表地址的是(C )。A.k, pB.&k, &pC.&k, pD.k, *pA k 不是地址B k,p 都是变量所以&k, &
7、;p 都代表地址 (&p 是指针变量p 的地址C &k 和 p 都是代表变量k 的地址,所以C 正确D K,*p 都等于 4,都不是地址190. 若有定义: double *q,p; 则能给输入项读入数据的正确程序段是(),所以 B 也是正确的B )。A. q=&p;scanf("%lf",*q);B. q=&p;scanf("%lf",q);C. *q=&p;scanf("%lf",q);D. *q=&p;scanf("%lf",*q);根据课本P37,调用 sca
8、nf 函数的语法格式为:scanf(格式控制字符串,地址列表);所以A. *q 不是地址,所以A 错B.因为 q=&p ,即 q 等于 p 的地址,所以C.D. *q=&p错误B 正确191.若已定义 : int q=5;对int *p=&q; 和p=&q;这两条语句理解错误的是(C )。A. 是对 p 定义时初始化 ,使 p 指向 q;而是将 q 的地址赋给 pB. 和中的 &q 含义相同 ,都表示给指针变量赋值C. 是对 p 定义时初始化 ,使 p 指向 q;而是将 q 的值赋给 p 所指向的变量D.和的执行结果都是把q 的地址赋给pint *p=&
9、amp;q;是对 p 定义时初始化,使 p 的值等于q 的地址 p=&q; 是将 q 的地址赋值给 p.C 中理解错误。应该是将q 的地址赋值给p.192. 下面语句错误的是( A )。A. int *p; *p=20;学习必备欢迎下载B. char *s="abcdef" printf("%sn",s);C. char *str="abcdef" str+;D. char *str;str="abcdef"见课本 P153,未经赋值的指针变量其值是随机的,可能指向系统或其他已使用的数据区,对它进行写入操作
10、将可能出现不可预知的情况,严重时将造成系统混乱,甚至死机。A 没有对 P 赋值,就执行 *p=20; 对 p 所指向的单位进行写操作,可能会造成不可预知的错误,所以 A 错。193.若有定义int a23,*p=a; ,则能表示数组元素a12 地址的是(D )。A. *(a1+2)B. a12C. p5D. p+5A.a1 是第 1 行的首地址(行号从0 开始计算),也是第 1 行的首个元素(第0 个元素)的地址,即 &a10a1+2是表示从 a10 开始往移动2 个位置,即 a12 的地址,所以 * ( a1+2 )等价于 *(&a12)等价于 a12, 所以不能选 A 。B
11、.显然是错的D. 因为 p=a,&aij 等价于 p+i*3+j 其中 3 是数组 a 的列数所以 &a12 等价于 p+1*3+2, 即 p+5 。所以答案选D因为 p=a,即 p 等于 a00 的地址(指向 a00 ),所以 p+5 是从 a00 开始往后偏移5 个位置元素的地址,即p+5 是 a5 的地址a00a01a02a10a11a12a20 .pp+1p+2p+3p+4p+5p+6.194.若已定义 : int a=5,*p; 且 p=&a;则以下表示中不正确的是(B )。A. &a=&(*p)B. *(&p)=aC. &(*
12、p)=pD. *(&a)=a因为p=&a; 所以 *p=a,所以B 错195.若有以下程序段,则叙述正确的是(C )。char s="computer"char *p;p=s;A.s 和 p 完全相同B.数组 s 的长度和 p 所指向的字符串长度相等C.*p 与 s0相等D.数组 s 中的内容和指针变量p 中的内容相等A.s 是数组名,代表一个固定的地址(指针常量), s 的值是不能改变的。可以对 p 的进行赋值(p 的值可程序运行过程中可以修改),所以 A 错。P 的是指针变量,B 数组长度和字符串长度是两个不同的概念。数组长度是所有元素个数,char s
13、="computer" 数组长度为字符串商都是指字符串中字符的个数(不包括字符串结束标志是 "computer", 有 8 个字符,所以字符串长度为8所以 B错9( a8= /0)/0) , p 所指向的字符串学习必备欢迎下载C.s 等价于 &s0 , 所以 *p 等价于 s0,所以答案选CD. 数组 s 中的内容 :s0=c,s1=o,.,s7=r,s8=0指针变量 p 中的内容是s,即数组 s 的首地址( &s0 ) ,所以 D 是错的。196. 以下程序段的运行结果是(B )。enum weekday aa,bb=2,cc,dd,e
14、e week=ee;printf("%dn",week);A. eeB. 5C. 2D. 4课本 P277week 是枚举类型变量,它的取值为因为 bb=2,所以 cc=3,dd=4,ee=5以%d 格式输出 ee,结果为 5ee,197.若有以下程序段,则不能正确访问数组元素a12 的是(A )。int (*p)3;int a3=1,2,3,4,5,6,7,8,9;p = a;A.p1+2B.p12C.(*(p+1)2D.*(*(a+1)+2)P 是指向一维数组(有因为 p=a; 所以 p1+2所以 A错3 个元素)的指针变量,详细见课本P164 3。等价于 a1+2 ,
15、而 a1+2 等价于 &a12, 所以 p1+2等价于&a12198. 以下程序段的运行结果是(A )。int a=1,2,3,4,5,6,7,*p=a;int n,sum=0;for(n=1;n<6;n+) sum+=pn+;printf("%d",sum);A. 12B. 15C. 16D. 27因为 p=a,所以pn 等价于 an执行 for(n=1;n<6;n+) sum+=pn+;当 n=1 时 满足 n<6 所以执行循环体sum=sum+p1=0+2=2, 然后 n 自增 1 两次 ,n 的值变为3当 n=3 时满足 n<
16、6 所以执行循环体sum=sum+p3=2+4=6, 然后 n 自增 1 两次 ,n 的值变为5当 n=5 时满足 n<6 所以执行循环体学习必备欢迎下载sum=sum+p5=6+6=12, 然后 n 自增 1 两次 ,n 的值变为7当 n=7 时不满足 n<6 所以结束循环。最后 sum 的值为 12。所以答案选 A199. 下面程序的运行结果是(A )。main( ) int a,b;int *p1=&a,*p2=&b,*t;a=10; b=20;t=p1; p1=p2; p2=t;printf("%d,%dn",a,b);A.10,20B.
17、20,10C.10,10D.20,20因为int *p1=&a,*p2=&b,*t;a=10; b=20;所以 p1 指向变量 a, p2 指向变量 b,这时候 a 等于 10, b 等于 20, *p1等于 10, *p2等于 20执行 t=p1; p1=p2; p2=t; 后P1 指向变量 b, p2 指向变量 a,这时候 a 等于 10, b 等于 20, *p1等于 20, *p2等于 10所以答案选 A200. 以下程序段运行后变量 s 的值为( C )。int a=1,2,3,4,5,6,7;int i,s=1,*p;p=&a3;for(i=0;i<3
18、;i+)s*=*(p+i);A. 6B. 60C. 120D. 210p=&a3;p 指向 a3当 i=0 时s=s*(*(p+0)=s*a3=1*4=4;当 i=1 时s=s*(*(p+1)=s*a4=4*5=20;当 i=2 时s=s*(*(p+2)=s*a5=20*6=120;所以最后s=120,答案选C学习必备欢迎下载201. 以下程序段运行后变量 ans 的值为( B )。int a=1,2,3,b=3,2,1;int *p=a,*q=b;int k,ans=0;for(k=0;k<3;k+)if(*(p+k)=*(q+k)ans=ans+*(p+k)*2;A. 2B.
19、 4C. 6D. 12int a=1,2,3,b=3,2,1;int *p=a,*q=b;p 指向 a0q 指向 b0执行for(k=0;k<3;k+)if(*(p+k)=*(q+k)ans=ans+*(p+k)*2;当 k=0 时*(p+k)=ak=a0=1*(q+k)=bk=a0=3所以 *(p+k)=*(q+k)不成立,k+, 满足 k<3,所以进入下一次循环当 k=1 时*(p+k)=ak=a1=3*(q+k)=bk=a1=1所以 *(p+k)=*(q+k)成立,执行ans=ans+*(p+k)*2;ans=ans+*(p+k)*2=0+ak*2=0+a1*2=0+2*2=
20、4然后 k+, 满足 k<3,所以进入下一次循环当 k=2 时*(p+k)=ak=a2=1*(q+k)=bk=a2=3所以 *(p+k)=*(q+k)不成立,k+, 不满足 k<3,所以结束循环最后 ans=4,答案选B202. 以下程序运行结果是(A )。main( ) char a="abc",*p; for(p=a;p<a+3;p+)printf("%s",p);A. abcbccB. abcC. cbabaa学习必备欢迎下载D. cbaprintf("%s",p);是输出 p 所指向的字符串a+i 等价于 &
21、amp;aifor(p=a;p<a+3;p+)printf("%s",p);当 p=a 时p 指向 a0,所以 printf("%s",p); 输出以地址 &a0 开始的字符串,即输出”abc”当 p=a+1 时p 指向 a1,所以 printf("%s",p); 输出以地址 &a1 开始的字符串,即输出”bc”当 p=a+2 时p 指向 a2,所以 printf("%s",p); 输出以地址 &a2 开始的字符串,即输出 ”c” 所以最后输出结果为: abcbcc,答案选 A203.
22、 以下程序的输出结果是(B )。#include<stdio.h>void main()int i;char *s="ABCD"for(i=0;i<3;i+)printf("%sn",s+i);A. CD BCD ABCDB. ABCD BCD CDC. AB ABC ABCDD. ABCD ABC ABs+i 第 i 个字符的地址执行for(i=0;i<3;i+)printf("%sn",s+i);当 i=0 时printf("%sn",s+i);输出 ”ABCD ”,然后回车换行当 i=
23、1 时printf("%sn",s+i);输出 ”BCD ”,然后回车换行当 i=2 时printf("%sn",s+i);输出 ”CD ”,然后回车换行所以答案选B学习必备欢迎下载204. 以下程序的输出结果是(B )。#include <stdio.h>void main()char *p="ABCDE",*q=p+3;printf("%cn",q-2);A. AB. BC. CD. Dqi 等价于 * (q+i )所以 q-2等价于 *(q-2)因为 q=p+3 ,所以 *(q-2) 等于 *(p
24、+3-2) 即 * (p+1 ) 即 B答案选 B205. 下面程序执行时,若输入 5 4 3 2 1<回车 >,则输出为: B #include <stdio.h>#define N 5 void main() int aN;int *p=a; while(p<a+N)scanf("%d",p+);while(p>a)printf("%d ",*(-p);A. 54321B. 12345C. 34512D. 32154int *p=a;p 指向 a0, while(p<a+N)scanf("%d&qu
25、ot;,p+);第一次循环:scanf("%d",p+); 把 5赋值给 a0,然后 p+, (p 值变为 a+1),p 指向 a1第二次循环:scanf("%d",p+); 把 4赋值给 a1,然后 p+, (p 值变为 a+2),p 指向 a2第三次循环:scanf("%d",p+); 把 3赋值给 a2,然后 p+, (p 值变为 a+3),p 指向 a3第四次循环:scanf("%d",p+); 把 2赋值给 a3,然后 p+, (p 值变为 a+3),p 指向 a4第五次循环:scanf("%d
26、",p+); 把 1 赋值给 a4,然后 p+, (p 值变为 a+5),不满足 p<a+N 结束循环。while(p>a)学习必备欢迎下载printf("%d ",*(-p);p 的值为 a+5,满足 p>a ,执行循环体第一次循环:printf("%d ",*(-p);p 自减 1(值变为 a+4),然后输出 *p( 输出 a4) p 的值为 a+4,满足 p>a ,执行循环体第二次循环:printf("%d ",*(-p);p自减 1(值变为 a+3),然后输出 *p( 输出 a3)p 的值为
27、a+3,满足 p>a ,执行循环体第三次循环:printf("%d ",*(-p);p自减 1(值变为 a+2),然后输出 *p( 输出 a2)p 的值为 a+2,满足 p>a ,执行循环体第四次循环:printf("%d ",*(-p);p自减 1(值变为 a+1),然后输出 *p( 输出 a1)p 的值为 a+1,满足 p>a ,执行循环体第五次循环:printf("%d ",*(-p);p自减 1(值变为 a),然后输出 *p( 输出 a0)p 的值为 a,不满足 p>a ,结束循环。最后输出12345所
28、以答案选B206. 下面程序段的运行结果是( C )。 int a=1,2,3,4,5,6,*p=a;int i,sum=0;for(i=1;i<6;i+) sum+=*(p+);printf("%d",sum);A. 10B. 12C. 15D. 20*(p+); /* 先输出 *p ,再进行p+*/p=a;p 指向 a0for(i=1;i<6;i+) sum+=*(p+);当 i=1 时sum=sum+*p=sum+a0=0+1=1; 然后 p+,p 的值变为a+1,即 p 指向 a1当 i=2 时sum=sum+*p=sum+a1=1+2=3; 然后 p+
29、,p 的值变为a+2,即 p 指向 a2当 i=3 时sum=sum+*p=sum+a2=3+3=6; 然后 p+,p 的值变为a+3,即 p 指向 a3当 i=4 时sum=sum+*p=sum+a3=6+4=10; 然后 p+,p 的值变为a+4,即 p 指向 a4当 i=5 时sum=sum+*p=sum+a4=10+5=15; 然后 p+,p 的值变为 a+5,即 p 指向 a5 最后 printf("%d",sum); 输出 15,答案选 C207. 下面程序运行结果是( D )。 main( )学习必备欢迎下载 int a=1,2,3,4,5,*p,*q,i;
30、p=a; q=p+4; for(i=1;i<5;i+)printf("%d%d",*(q-i),*(p+i);A. 24334251B. 51423324C. 15243342D. 42332415p=a; p 指向 a0 q=p+4;q 指向 a4 for(i=1;i<5;i+)printf("%d%d",*(q-i),*(p+i);当i=1时printf("%d%d",*(q-i),*(p+i);输出a3和a1,即输出42当i=2时printf("%d%d",*(q-i),*(p+i);输出a2和a2,即输出33当i=3时printf("%d%d"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏软件发布及授权使用合同
- 专业律师事务所有偿法律咨询合同
- 2025年锤纹漆合作协议书
- 房屋装修半包合同样本
- 借款抵押车辆合同
- 解决方案研讨会邀请函
- 品牌租赁住宅合同
- 人才服务协议书
- 土地储备与开发合作协议
- Recycle 2(教学设计)-2024-2025学年人教PEP版英语五年级上册
- 集成电路研究报告-集成电路项目可行性研究报告2024年
- 教师师德专题培训
- 2024年湖南生物机电职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 桩基承载力自平衡法检测方案资料
- 2025云南昆明空港投资开发集团招聘7人高频重点提升(共500题)附带答案详解
- 成都市2024-2025学年度上期期末高一期末语文试卷(含答案)
- 2025年教育局财务工作计划
- 教科版四年级下册科学科学教案+教材分析
- 广东2024年广东金融学院招聘工作人员10人笔试历年典型考点(频考版试卷)附带答案详解
- T-WSJD 18.22-2024 工作场所空气中化学因素测定 双氯甲醚的便携式气相色谱-质谱法
- 北京市东城区2023-2024学年高二下学期期末英语试题 含解析
评论
0/150
提交评论