前几天同学去淘宝面试,问到了结构体的偏移量问题,当时以为是搞对齐原则呢。面试官问题:定义了一个结构体,如果不定义它的对象,怎样才能求出它元素的偏移量?
百度了一下,发现解说很多,很详细,属于经典面试题目,所以得记录一下。
方法:调用宏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
大大木马 阅读(1168)
评论(0) 编辑 收藏 引用