c - Why is the offsetof macro necessary? -


i new c language , learned structs , pointers.

my question related offsetof macro saw. know how works , logic behind that.

in <stddef.h> file definition follows:

#define offsetof(type,member) ((unsigned long) &(((type*)0)->member)) 

my question is, if have struct shown below:

struct test {     int field1:     int field2: };  struct test var; 

why cannot directly address of field2 as:

char * p = (char *)&var; char *addressoffield2 = p + sizeof(int); 

rather writing this

field2offset = offsetof (struct test, field2); 

and adding offset value var's starting address?

is there difference? using offsetof more efficient?

the c compiler add padding bits or bytes between members of struct in order improve efficiency , keep integers word-aligned (which in architectures required avoid bus errors , in architectures required avoid efficiency problems). example, in many compilers, if have struct:

struct imlikelypadded {     int x;     char y;     int z; }; 

you might find sizeof(struct imlikelypadded) 12, not 9, because compiler insert 3 padding bytes between end of one-byte char y , word-sized int z. why offsetof useful - lets determine things factoring in padding bytes , highly portable.


Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -