实验室的师兄师姐为找工作都在狂做C/C++的笔试题,偶们也掺和了下,做了两道指针方面的,大家一起来看看吧。
int a[20];
char * p1 = (char * )a;
char * p2 = (char *)(a+5);
int n= p2-p1;
答案:20。
解析:int为4个字节,char为1个字节。a是int*型指针,加减运算以4个字节为单位,a+5便会指向第20个字节;而p1,p2是char*型,它们进行加减运算时以1个字节为单位。于是p1指向第1个字节而p2指向第21个字节,于是21-1=20,n的值为20。
int k = 0X123456;
char * p = (char *) &k;
答案:’V’(字符V)
解析:k为int型,32位,0×123456如果写全的话应该是0×00123456。&k为k的地址,指向k的低位。p为char*的指针,它只指向一个字节,于是*p指向的值为0×56,十进制值为86,对应的ASCII码为’V’。
附:深入理解C语言指针的奥秘,没搞明白的同学可以全面的学习下C语言的指针及其一些应用。
© 2009, kangzj. 版权所有.
十月 14th, 2009 at 10:19
第二题容易些
第一题开始还没反应上来。
*(a+5)的值 就是a[5]的值。a指针就是a[0]的。&a[5]-&a[0]=5(int)
我感觉
类似x=1;y=3;int m=a[x+y];
x+y下标的计算应该发生在编译阶段 而不是运行时。忘了在那里看过,sizeof(int)这样的函数好像也发生在编译阶段。sizeof()并非真正意义的函数,像操作符。欢迎讨论!
[回复]
kangzj 回复:
十月 14th, 2009 at 11:08
@houkai, 我怎么感觉第一题容易些,呵呵,我第一题一下子看出来了,第二天看了好一会儿;应该就是你说的那样,各种内置类型的长度编译时肯定就已经确定了
[回复]
十月 14th, 2009 at 11:12
大学的时候指针就没学好,还好现在用C#已经不再用指针了。
[回复]
kangzj 回复:
十月 14th, 2009 at 11:16
@Hobo, 嗯,但是高效率的底层API等的开发还是离不开C语言和指针的,可以参考下我转载的那篇指针的文章
[回复]
十月 14th, 2009 at 12:04
还好了,对于指针刚开始我是怎么都弄不明白
[回复]
kangzj 回复:
十月 14th, 2009 at 12:56
@ABitNo, 嗯,刚学的时候可能会难,熟了就好了
[回复]
十月 14th, 2009 at 12:25
看看当了解了解了~
[回复]
kangzj 回复:
十月 14th, 2009 at 12:56
@林木木, 你这句话我看了三遍才懂
[回复]
十月 14th, 2009 at 14:36
C?指针?忘了。。。飘过。。。
[回复]
kangzj 回复:
十月 14th, 2009 at 15:03
@蛋王, 这东西不用肯定忘,哈哈
[回复]
十月 14th, 2009 at 14:49
技术方面的牛人啊,过来支持下
[回复]
kangzj 回复:
十月 14th, 2009 at 15:03
@先看看, 不牛不牛,跟牛差好远呢
[回复]
十月 14th, 2009 at 15:24
c++我只会简单修改——也不知道语法直接修改达到目的,然后编译!——也会遇到问题一大堆搜解决之~,编程方面基本忘得一干二净了,闲时休闲玩玩而已了
[回复]
kangzj 回复:
十月 14th, 2009 at 17:00
@zwwooooo, 嗯,编程不用的吧忘得确实很快
[回复]
十月 14th, 2009 at 19:23
好像JAVA和.NET都抛度了指针。
[回复]
kangzj 回复:
十月 14th, 2009 at 22:16
@zhukun, 高效率的底层API等的开发还是离不开C语言和指针的,这也是为什么C/C++排名是绝对的第一
[回复]
十月 15th, 2009 at 01:25
博主首页怎么没有友情链接了?
[回复]
kangzj 回复:
十月 15th, 2009 at 10:16
@zhukun, 这次是真的没有了,我看了下,原来是widget cache bug了,奶奶的,现在好的,不好意思
[回复]
kangzj 回复:
十月 15th, 2009 at 13:25
@zhukun, widget cache可以给我减少20多次的查询,可是总是有这样那样的问题,暂时把这个插件禁用了
[回复]
十月 15th, 2009 at 02:38
学习了 ~ c语言笔试题
[回复]
十月 15th, 2009 at 15:39
C快忘光了……
我也准备干掉Windows了……我在那下面太能折腾了 – -
话说师兄用啥IDE呢……编程的话。。。
[回复]
kangzj 回复:
十月 15th, 2009 at 15:42
@我买糕的。, 现在做项目用的是VS2005,自己做算法的话用dev c++
[回复]
十月 15th, 2009 at 16:59
悲剧,C语言我学了半年一节课没听,甚至连课本都没看……考试90+
[回复]
kangzj 回复:
十月 15th, 2009 at 18:31
@蓝冰, 你真牛逼;想当年用了很大劲才得个89分
[回复]
十月 15th, 2009 at 17:19
C 都忘的差不多 了
[回复]
kangzj 回复:
十月 15th, 2009 at 18:38
@海天无影, 呵呵,不用肯定忘啊~
[回复]
十月 19th, 2009 at 15:07
学习学习
[回复]
一月 12th, 2010 at 18:14
第二题有问题。
答案只考虑了小端(little endian, IA的一般都是)
没有考虑大端。(big endian, Sun的一般是)
前一段时间去笔试中兴,考到了一个小端的。(题中说是intel的处理器,那就是小端了。)
[回复]
五月 18th, 2010 at 01:56
第二题 和 计算机存储的方式有关吧
并不一定每台计算机都是那个结果的
去 看下 大端小端
纯属个人看法.
[回复]
五月 18th, 2010 at 01:57
额 才发现已经有人说了 …..
[回复]