CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

华为3com的一道面试题

楼主colourfulman(恋爱养成中)2006-03-21 08:13:28 在 C/C++ / C语言 提问

在对齐为4的情况下  
  struct   BBB  
  {  
        long   num;  
        char   *name;  
        short   int   data;  
                    char   ha;  
        short   ba[5];  
  }*p;  
  p=0x1000000;  
  p+0x200=____;  
  (Ulong)p+0x200=____;  
  (char*)p+0x200=____;  
   
   
  希望各位达人给出答案和原因,谢谢拉 问题点数:20、回复次数:16Top

1 楼guigui_2001(*和风一起飞*)回复于 2006-03-21 12:42:34 得分 0

假设在32位CPU上,  
  sizeof(long)   =   4   bytes  
  sizeof(char   *)   =   4   bytes  
  sizeof(short   int)   =   sizeof(short)   =   2   bytes  
  sizeof(char)   =   1   bytes  
   
  由于是4字节对齐,  
  sizeof(struct   BBB)   =   sizeof(*p)    
  =   4   +   4   +   2   +   1   +   1/*补齐*/   +   2*5   +   2/*补齐*/   =   24   bytes     (经Dev-C++验证)  
   
  p=0x1000000;  
  p+0x200=____;  
          =   0x1000000   +   0x200*24  
   
  (Ulong)p+0x200=____;  
          =   0x1000000   +   0x200  
   
  (char*)p+0x200=____;  
          =   0x1000000   +   0x200*4  
   
  你可以参考一下指针运算的细节Top

2 楼Helloooooo(每天,我都新的)回复于 2006-03-23 13:41:31 得分 0

UPTop

3 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 15:54:18 得分 0

我手边暂时没有调试的环境,对这个有点疑问:  
  (char*)p+0x200=____;  
          =   0x1000000   +   0x200*4  
  应该是  
  (char*)p+0x200  
          =   0x1000000   +   0x200*1  
   
  p强制转型为指向char的指针,每加1应该是一个byte吧?这个时候也会要求四字节对齐?Top

4 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 16:14:54 得分 0

自己刚刚测了一下,我的是对的:  
  (char*)p+0x200  
          =   0x1000000   +   0x200*1  
  Top

5 楼benh(滴答)回复于 2006-03-23 16:54:33 得分 0

为什么第一个p要乘24呢?Top

6 楼smartcomplier(坚强的泡沫)回复于 2006-03-23 17:02:11 得分 0

头比较晕.......Top

7 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-23 17:11:27 得分 0

to   benh(滴答)   :  
  guigui_2001(*和风一起飞*)   已经说得很清楚了:  
  sizeof(long)   =   4   bytes  
  sizeof(char   *)   =   4   bytes  
  sizeof(short   int)   =   sizeof(short)   =   2   bytes  
  sizeof(char)   =   1   bytes  
   
  由于是4字节对齐,  
  sizeof(struct   BBB)   =   sizeof(*p)    
  =   4   +   4   +   2   +   1   +   1/*补齐*/   +   2*5   +   2/*补齐*/   =   24   bytesTop

8 楼benh(滴答)回复于 2006-03-23 17:15:26 得分 0

p+0x200是什么意思?加上200个结构体空间占用的地址?为什么不是直接在地址空间上加上200呢?Top

9 楼jinjiajie(leorio)回复于 2006-03-23 17:38:10 得分 0

0x200是迷惑,只是=p+512Top

10 楼liyusen007(森)回复于 2006-03-23 17:41:22 得分 0

关键在理解指针的类型和指针的+操作Top

11 楼jinjiajie(leorio)回复于 2006-03-23 18:02:34 得分 0

(Ulong)p+0x200=____;  
          =   0x1000000   +   0x200  
   
   
  这个我有疑问....ulong是4字节的吧?为什么强转过来后会只+1*0x200Top

12 楼manplus(魅力加加)回复于 2006-03-23 18:03:41 得分 0

mark  
  Top

13 楼liyusen007(森)回复于 2006-03-23 19:25:36 得分 0

(Ulong)p+0x200=____;  
          =   0x1000000   +   0x200  
   
   
  这个我有疑问....ulong是4字节的吧?为什么强转过来后会只+1*0x200  
  //////////////////////  
  请注意:这时将P转换为(Ulong)型,已经不是指针了。不能够再进行取值操作!Top

14 楼guigui_2001(*和风一起飞*)回复于 2006-03-23 19:55:20 得分 0

自己刚刚测了一下,我的是对的:  
  (char*)p+0x200  
          =   0x1000000   +   0x200*1  
   
  =====================  
  谢谢   universes(universes),  
  的确是这样,  
  当时想当然就写了:(  
  Top

15 楼universes(及时揭帖是一种美德 | CSDN也这么黑)回复于 2006-03-24 08:46:47 得分 0

(Ulong)p+0x200=____;  
          =   0x1000000   +   0x200  
   
   
  这个我有疑问....ulong是4字节的吧?为什么强转过来后会只+1*0x200  
   
  ------------------------------------------------------------------  
  (Ulong)p+0x200=____;  
          =   0x1000000   +   0x200  
  你再和这个比较一下:  
  (Ulong *)p+0x200=____;  
          =   0x1000000   +   0x200*4  
   
   
   
  另,to   guigui_2001(*和风一起飞*)   :  
  呵呵,不客气,来这里就是一起学习的Top

16 楼cdo(Everything has a favourable turn)回复于 2006-03-24 14:06:45 得分 0

请注意:这时将P转换为(Ulong)型,已经不是指针了。不能够再进行取值操作!  
  //////////////////////////  
   
  呵呵,原来是这样,思维定视了.Top

相关问题

  • 一道华为面试题
  • 一道华为面试题(在线等)!!!!!!!!!!!!!!!
  • 华为面试题
  • 华为面试题
  • 华为面试题
  • 华为面试题
  • 华为一道面试题(SQL语句填空)
  • 华为笔试过了,面试时又出了一道题
  • 刚刚看到的一道华为面试题
  • 请教:华为面试题

关键词

  • 指针
  • x200
  • x1000000
  • bytessizeof
  • ulong
  • 有疑问
  • 补齐
  • short
  • sizeof
  • 操作

得分解答快速导航

  • 帖主:colourfulman

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo