offsetof関数は、構造体メンバーの位置(構造体の先頭からのオフセット)を取得します。
#include <stddef.h>
size_t offsetof(type, member);
typetは対象となる構造体を指定します。
memberは対象となるメンバーを指定します。
戻り値として、構造体の先頭からのオフセットをバイト単位で返します。
プログラム 例
#include <stdio.h> #include <stddef.h> /* メンバー構造体 */ struct member { int number; /* 番号 */ char name[15]; /* 名前 */ short age; /* 年齢 */ char sex; /* 性別 */ double height; /* 身長 */ float weight; /* 体重 */ }; int main() { printf('member構造体の大きさ : %d\n', sizeof(struct member)); printf('number (int) : %d\n', offsetof(struct member, number)); printf('name (char [15]) : %d\n', offsetof(struct member, name)); printf('age (short) : %d\n', offsetof(struct member, age)); printf('sex (char) : %d\n', offsetof(struct member, sex)); printf('height (double) : %d\n', offsetof(struct member, height)); printf('weight (float) : %d\n', offsetof(struct member, weight)); return 0; }
例の実行結果
$ ./offsetof.exe member構造体の大きさ : 36 number (int) : 0 name (char [15]) : 4 age (short) : 20 sex (char) : 22 height (double) : 24 weight (float) : 32 $