两道关于指针的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位,0x123456如果写全的话应该是0x00123456。&k为k的地址,指向k的低位。p为char*的指针,它只指向一个字节,于是*p指向的值为0x56,十进制值为86,对应的ASCII码为’V’。

附:深入理解C语言指针的奥秘,没搞明白的同学可以全面的学习下C语言的指针及其一些应用。


Posted

in

by

Comments

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

  1. hailoong Avatar
    hailoong

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

  2. hailoong Avatar
    hailoong

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

  3. wildpointer Avatar

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

  4. 海天无影 Avatar

    C 都忘的差不多 了

    1. kangzj Avatar

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

  5. 蓝冰 Avatar

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

    1. kangzj Avatar

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

  6. 我买糕的。 Avatar

    C快忘光了……
    我也准备干掉Windows了……我在那下面太能折腾了 – –
    话说师兄用啥IDE呢……编程的话。。。

    1. kangzj Avatar

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

  7. 翔子 Avatar

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

  8. zhukun Avatar

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

    1. kangzj Avatar

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

    2. kangzj Avatar

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

  9. zhukun Avatar

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

    1. kangzj Avatar

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

  10. zwwooooo Avatar

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

    1. kangzj Avatar

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

  11. 先看看 Avatar

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

    1. kangzj Avatar

      @先看看, 不牛不牛,跟牛差好远呢 😐

  12. 蛋王 Avatar

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

    1. kangzj Avatar

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

  13. 林木木 Avatar

    看看当了解了解了~

    1. kangzj Avatar

      @林木木, 你这句话我看了三遍才懂 😮

  14. ABitNo Avatar

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

    1. kangzj Avatar

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

  15. Hobo Avatar

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

    1. kangzj Avatar

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

  16. houkai Avatar

    第二题容易些
    第一题开始还没反应上来。
    *(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()并非真正意义的函数,像操作符。欢迎讨论!

    1. kangzj Avatar

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

Leave a Reply

%d bloggers like this: