ACM乐园
Love Me,Love My Code!
posts - 53,  comments - 24,  trackbacks - 0
         前几天同学去淘宝面试,问到了结构体的偏移量问题,当时以为是搞对齐原则呢。面试官问题:定义了一个结构体,如果不定义它的对象,怎样才能求出它元素的偏移量?
         百度了一下,发现解说很多,很详细,属于经典面试题目,所以得记录一下。
         方法:调用宏offsetof(struct_name,struct_element),返回值就是偏移量,跟踪发现:
         #define offsetof(struct_name,struct_element) (size_t)&(((struct_name *)0)->struct_element)。
可以看出来它先是将整形的0强制类型转换为结构体指针,但是值还是0不变,但表示的是结构体首地址为0,那么((struct_name *)0)->struct_element访问的就是元素的值了,我们在它前面加上取地址符&,这样得到的就是它的地址了,然后把地址强制转换为unsigned int型即可了。如果将0变成1或者其他数呢?只要再减去这个数就行了:(unsigned int)&(((struct_name *)1)->struct_element)-1。
         要深入的了解本质才行呀。。。。努力!
posted on 2011-04-23 23:54 大大木马 阅读(1159) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔档案(53)

文章档案(2)

搜索

  •  

积分与排名

  • 积分 - 62905
  • 排名 - 351

最新评论

阅读排行榜

评论排行榜