0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C言語 - offsetofの使い方を確認

Last updated at Posted at 2022-03-20

offsetofマクロを使ったプログラム

offsetofマクロについて仕様を確認しました。
確認環境は以下の通りです。

開発環境 OS
Microsoft Visual Studio Community 2019 Version 16.11.7 Windows 10 バージョン21H1

使い方

offsetof(構造体名(struct xxx),メンバー変数名) ・・・ 構造体メンバーの先頭から指定したメンバーまでのオフセット値を返してくれます。

参考

MSDNを確認ください。

何ができるの

offsetofは構造体のメンバーに対して適用します。
下記構造体をサンプルとします。

	struct students {		// 生徒情報(構造体)
		char name[16];		// 氏名
		short belongto;		// 所属
		short age;			// 年齢
		long testaverage;	// テスト平均
	};

サンプルプログラム

上記の構造体に対して、以下のとおり、offsetofマクロを使用してみます。

	printf("offsetof(name)=%d\n", offsetof(struct students, name));
	printf("offsetof(belongto)=%d\n", offsetof(struct students, belongto));
	printf("offsetof(age)=%d\n", offsetof(struct students, age));
	printf("offsetof(testaverage)=%d\n", offsetof(struct students, testaverage));

実行結果

offsetof(name)=0			// 先頭メンバーなので0
offsetof(belongto)=16		// char 16byteの後なので先頭からbelongtoまでのオフセット値16byte
offsetof(age)=18			// belongto 2byteの後なので先頭からageまでのオフセット値18byte
offsetof(testaverage)=20	// age 2byteの後なので先頭からtestaverageまでのオフセット値20byte

感想

使ってみるとシンプルですね。
ただ、どんな時に使えるか分かりません。
効果的な使い方があれば教えて下さい。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?