C言語入門講座。関数、サンプル集を参考にして、 C言語をマスターしよう。初心者から上級者まで。

構造体メンバーの位置を取得する

2012.08.10

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
$

関連記事