两道关于指针的C语言笔试题

实验室的师兄师姐为找工作都在狂做C/C++的笔试题,偶们也掺和了下,做了两道指针方面的,大家一起来看看吧。

1. 求n的值。

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。

2. 求 * p 的值。

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. 版权所有.

Tags: , , , , ,
| 十月 14th, 2009 | Posted in 编程算法 |

30 Responses to “两道关于指针的C语言笔试题”

  1. houkai Says:

    第二题容易些
    第一题开始还没反应上来。
    *(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 回复:

    @houkai, 我怎么感觉第一题容易些,呵呵,我第一题一下子看出来了,第二天看了好一会儿;应该就是你说的那样,各种内置类型的长度编译时肯定就已经确定了 :-|

    [回复]

  2. Hobo Says:

    大学的时候指针就没学好,还好现在用C#已经不再用指针了。

    [回复]

    kangzj 回复:

    @Hobo, 嗯,但是高效率的底层API等的开发还是离不开C语言和指针的,可以参考下我转载的那篇指针的文章 :-|

    [回复]

  3. ABitNo Says:

    还好了,对于指针刚开始我是怎么都弄不明白

    [回复]

    kangzj 回复:

    @ABitNo, 嗯,刚学的时候可能会难,熟了就好了

    [回复]

  4. 林木木 Says:

    看看当了解了解了~

    [回复]

    kangzj 回复:

    @林木木, 你这句话我看了三遍才懂 :-o

    [回复]

  5. 蛋王 Says:

    C?指针?忘了。。。飘过。。。

    [回复]

    kangzj 回复:

    @蛋王, 这东西不用肯定忘,哈哈

    [回复]

  6. 先看看 Says:

    技术方面的牛人啊,过来支持下

    [回复]

    kangzj 回复:

    @先看看, 不牛不牛,跟牛差好远呢 :-|

    [回复]

  7. zwwooooo Says:

    c++我只会简单修改——也不知道语法直接修改达到目的,然后编译!——也会遇到问题一大堆搜解决之~,编程方面基本忘得一干二净了,闲时休闲玩玩而已了

    [回复]

    kangzj 回复:

    @zwwooooo, 嗯,编程不用的吧忘得确实很快

    [回复]

  8. zhukun Says:

    好像JAVA和.NET都抛度了指针。

    [回复]

    kangzj 回复:

    @zhukun, 高效率的底层API等的开发还是离不开C语言和指针的,这也是为什么C/C++排名是绝对的第一

    [回复]

  9. zhukun Says:

    博主首页怎么没有友情链接了?

    [回复]

    kangzj 回复:

    @zhukun, 这次是真的没有了,我看了下,原来是widget cache bug了,奶奶的,现在好的,不好意思 :wink:

    [回复]

    kangzj 回复:

    @zhukun, widget cache可以给我减少20多次的查询,可是总是有这样那样的问题,暂时把这个插件禁用了

    [回复]

  10. 翔子 Says:

    学习了 ~ c语言笔试题 8)

    [回复]

  11. 我买糕的。 Says:

    C快忘光了……

    我也准备干掉Windows了……我在那下面太能折腾了 – -

    话说师兄用啥IDE呢……编程的话。。。

    [回复]

    kangzj 回复:

    @我买糕的。, 现在做项目用的是VS2005,自己做算法的话用dev c++

    [回复]

  12. 蓝冰 Says:

    悲剧,C语言我学了半年一节课没听,甚至连课本都没看……考试90+ :mrgreen:

    [回复]

    kangzj 回复:

    @蓝冰, 你真牛逼;想当年用了很大劲才得个89分

    [回复]

  13. 海天无影 Says:

    C 都忘的差不多 了

    [回复]

    kangzj 回复:

    @海天无影, 呵呵,不用肯定忘啊~

    [回复]

  14. vêtements femmes Says:

    学习学习

    [回复]

  15. wildpointer Says:

    第二题有问题。
    答案只考虑了小端(little endian, IA的一般都是)
    没有考虑大端。(big endian, Sun的一般是)
    前一段时间去笔试中兴,考到了一个小端的。(题中说是intel的处理器,那就是小端了。)

    [回复]

  16. hailoong Says:

    第二题 和 计算机存储的方式有关吧
    并不一定每台计算机都是那个结果的
    去 看下 大端小端
    纯属个人看法.

    [回复]

  17. hailoong Says:

    额 才发现已经有人说了 …..

    [回复]

Leave a Reply