




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
六、指针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变量的地址),所以*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;设0i5,对a数组元素不正确的引用是( C )。A. *(&ai)B. ap-aC. *(*(a+i)D. pi1.指针运算符取地址运算符&:其功能是取变量的地址。2.取内容运算符*:用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。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. p1p2D. p1=p2两个指针变量可以相减(结果表示介于二者之间元素的个数),可以比较大小,但不能相加。186. 以下叙述错误的是( D )。A. 存放地址的变量称为指针变量B. NULL可以赋值给任何类型的指针变量C. 一个指针变量只能指向类型相同的变量D. 两个相同类型的指针变量可以作加减运算D两个相同类型的指针变量相加没有意义,所以不可以作加运算,所以D错。187. 以下程序段运行后,表达式*(p+4)的值为( B )。char a=china;char *p;p=a;A. nB. aC. 存放n的地址D. 存放a的地址a是一维数组名,表示数组首地址,即等价于&a0因为p=a;即p=&a0,所以*p等价于a0因为p=a;所以p+i等价于a+i, 而a+i是ai的地址,*(a+i)等价于ai所以*(p+i)等价于ai*(p+4)=a4=a188. 以下程序段运行后,表达式*(p+)的值为( A )。 char a5=work; char *p=a;A. wB. 存放w的地址C. oD. 存放o的地址 printf( %3dn, (*p)+ ); /*先输出*p,再进行(*p)+ */ printf( %3dn, *p+ ); /*先输出*p,再进行p+ */ printf( %3dn, *+p ); /*先进行+p,再输出*p */ printf( %3dn, +*p ); /*先进行+(*p),再输出*p */*(p+) 的值等于*p ,然后p+因为p等于a所以*p等于a0189. 若有定义:int *p,k=4; p=&k;以下均代表地址的是( C )。A. k, pB. &k, &pC. &k, pD. k, *pA k不是地址B k,p都是变量所以&k, &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=&p;scanf(%lf,q);C. *q=&p;scanf(%lf,q);D. *q=&p;scanf(%lf,*q);根据课本P37,调用scanf函数的语法格式为:scanf(格式控制字符串,地址列表);所以A. *q不是地址,所以A错B.因为q=&p,即q等于p的地址,所以B正确C.D. *q=&p错误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的地址赋给p int *p=&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,未经赋值的指针变量其值是随机的,可能指向系统或其他已使用的数据区,对它进行写入操作将可能出现不可预知的情况,严重时将造成系统混乱,甚至死机。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.显然是错的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的地址a00 a01 a02 a10 a11 a12 a20 .p p+1 p+2 p+3 p+4 p+5 p+6 .194. 若已定义: int a=5,*p; 且 p=&a; 则以下表示中不正确的是( B )。A. &a=&(*p)B. *(&p)=aC. &(*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的进行赋值(p的值可程序运行过程中可以修改),所以A错。B 数组长度和字符串长度是两个不同的概念。数组长度是所有元素个数,char s=computer;数组长度为9(a8=/0)字符串商都是指字符串中字符的个数(不包括字符串结束标志/0), p所指向的字符串是computer,有8个字符,所以字符串长度为8所以B错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,ee week=ee;printf(%dn,week);A. eeB. 5C. 2D. 4课本P277week是枚举类型变量,它的取值为ee,因为bb=2,所以cc=3,dd=4,ee=5以%d格式输出ee,结果为5197. 若有以下程序段,则不能正确访问数组元素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是指向一维数组(有3个元素)的指针变量,详细见课本P1643。因为p=a;所以p1+2等价于a1+2,而a1+2等价于&a12,所以p1+2等价于&a12所以A错198. 以下程序段的运行结果是( A )。 int a=1,2,3,4,5,6,7,*p=a; int n,sum=0; for(n=1;n6;n+) sum+=pn+; printf(%d,sum);A. 12B. 15C. 16D. 27因为p=a,所以 pn等价于an执行for(n=1;n6;n+) sum+=pn+;当n=1时 满足n6 所以执行循环体sum=sum+p1=0+2=2,然后n自增1两次,n的值变为3当n=3时满足n6 所以执行循环体sum=sum+p3=2+4=6,然后n自增1两次,n的值变为5当n=5时满足n6 所以执行循环体sum=sum+p5=6+6=12,然后n自增1两次,n的值变为7当n=7时不满足n6 所以结束循环。最后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. 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;i3;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,答案选C201. 以下程序段运行后变量ans的值为( B )。 int a=1,2,3,b=3,2,1;int *p=a,*q=b;int k,ans=0;for(k=0;k3;k+) if(*(p+k)=*(q+k) ans=ans+*(p+k)*2;A. 2B. 4C. 6D. 12int a=1,2,3,b=3,2,1;int *p=a,*q=b;p指向a0 q指向b0执行for(k=0;k3;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+,满足k3,所以进入下一次循环当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=4然后k+,满足k3,所以进入下一次循环当k=2时*(p+k)=ak=a2=1*(q+k)=bk=a2=3所以*(p+k)=*(q+k)不成立,k+,不满足k3,所以结束循环最后ans=4,答案选B202. 以下程序运行结果是( A )。main( ) char a=abc,*p; for(p=a;pa+3;p+) printf(%s,p); A. abcbccB. abcC. cbabaaD. cbaprintf(%s,p); 是输出p所指向的字符串a+i 等价于&aifor(p=a;pa+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. 以下程序的输出结果是( B )。 #include void main() int i; char *s=ABCD; for(i=0;i3;i+) printf(%sn,s+i); A. CD BCD ABCDB. ABCD BCD CDC. AB ABC ABCDD. ABCD ABC ABs+i 第i个字符的地址执行 for(i=0;i3;i+) printf(%sn,s+i);当i=0时printf(%sn,s+i); 输出”ABCD”,然后回车换行当i=1时printf(%sn,s+i); 输出”BCD”,然后回车换行当i=2时printf(%sn,s+i); 输出”CD”,然后回车换行所以答案选B204. 以下程序的输出结果是( B )。 #include 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+3-2)即*(p+1) 即B答案选B205. 下面程序执行时,若输入5 4 3 2 1,则输出为:B #include #define N 5 void main() int aN; int *p=a; while(pa) printf(%d ,*(-p); A. 5 4 3 2 1B. 1 2 3 4 5C. 3 4 5 1 2D. 3 2 1 5 4int *p=a; p指向a0,while(pa+N) scanf(%d,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,p+);把1赋值给a4,然后p+,(p值变为a+5),不满足pa) printf(%d ,*(-p);p的值为a+5,满足pa ,执行循环体第一次循环:printf(%d ,*(-p);p自减1(值变为a+4),然后输出*p(输出a4)p的值为a+4,满足pa ,执行循环体第二次循环:printf(%d ,*(-p);p自减1(值变为a+3),然后输出*p(输出a3)p的值为a+3,满足pa ,执行循环体第三次循环:printf(%d ,*(-p);p自减1(值变为a+2),然后输出*p(输出a2)p的值为a+2,满足pa ,执行循环体第四次循环:printf(%d ,*(-p);p自减1(值变为a+1),然后输出*p(输出a1)p的值为a+1,满足pa ,执行循环体第五次循环:printf(%d ,*(-p);p自减1(值变为a),然后输出*p(输出a0)p的值为a,不满足pa ,结束循环。最后输出1 2 3 4 5所以答案选B206. 下面程序段的运行结果是( C )。 int a=1,2,3,4,5,6,*p=a; int i,sum=0; for(i=1;i6;i+) sum+=*(p+); printf(%d,sum);A. 10B. 12C. 15D. 20*(p+); /*先输出*p,再进行p+*/ p=a;p指向a0for(i=1;i6;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+,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; p=a; q=p+4; for(i=1;i5;i+) printf(%d%d,*(q-i),*(p+i); A. 24334251B. 51423324C. 15243342D. 42332415p=a; p指向a0q=p+4;q指向a4 for(i=1;i5;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(%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁道养路机械应用技术专业教学标准(高等职业教育专科)2025修订
- 药学专业教学标准(高等职业教育专科)2025修订
- 临床皮内注射技术
- 税务师考试东奥课件
- 中国广告发布行业市场调查研究及投资前景预测报告
- 中国农药杀菌剂行业市场调查报告
- 2025年中国手袋线行业市场发展前景及发展趋势与投资战略研究报告
- 回复反射器行业深度研究分析报告(2024-2030版)
- 中国城市经营行业市场发展现状及前景趋势与投资分析研究报告(2024-2030)
- 2025年中国小曲酒行业市场深度调研分析及投资前景研究预测报告
- LY/T 1787-2016非结构用集成材
- GB/T 3880.3-2012一般工业用铝及铝合金板、带材第3部分:尺寸偏差
- GB/T 1503-2008铸钢轧辊
- GB/T 12729.1-2008香辛料和调味品名称
- GB/T 1228-2006钢结构用高强度大六角头螺栓
- GB 4404.3-2010粮食作物种子第3部分:荞麦
- 【精品】高三开学励志主题班会课件
- 套管培训大纲课件
- 绿化施工进度网络图
- 机房接地方案
- 监理平行检查记录表格模板
评论
0/150
提交评论