發表文章

目前顯示的是 四月, 2013的文章

offsetof marco

Reference : http://www.cplusplus.com/reference/cstddef/offsetof/


offsetof 這個marco主要是取的struct的member的相對位置


例如:

struct book {
    char author[8];
    int price ;
    char publisher[20];
}


X+0   +--------------------------+
      +     char author[8]       +
X+8   +--------------------------+

      +     int  price           +
x+12  +--------------------------+
+     char publisher[20]   +
      +--------------------------+


所以我要找到struct book中的publisher的相對位址只要用offsetof就可以找到了

Example:

   offsetof(struct book, publisher) 會傳回 12


Code: 


#include <stdio.h>
#include <stddef.h>

struct book {
      char author[12];
      int  price ;
      char publisher[20];
};

int main(int argc, const char *argv[])
{
    printf("offset : %d\n",(int)offsetof(struct book, author));
    printf("offset : %d\n",(int)offsetof(struct book, price));
    printf("offset : %d\n",(int)offsetof(struct book, publisher));
    return 0;
}


接著來看這個marco是如何取的struct的member的offset
#define offsetof(TYPE, MEMBER) ((size_t) &…