C言語 共通の型定義 - stddef.h - [ offsetof, NULL, size_t, wchar_t, ptrdiff_t ]
2008.09.11 Thursday | by LRESULT
stddef.hでは、共通の型とマクロ定義があります。
何が共通なんだという話ですが、
どうやら、標準ライブラリ内で共通に使用される(インクルードされる)
、という意味らしいです。
NULL | ヌルポインタ どのアドレスも指していないポインタ |
---|---|
size_t | sizeof演算子やstrlen()での戻り値の型 int型でも良いが、長さを明示的に表す為にあります |
wchar_t | ワイド文字型 unsigned short型で定義されています 2バイト文字を表す為にあります |
ptrdiff_t | ポインタ同士の引き算の結果の型 int型でも良いが、同じ配列で、要素同士が どれくらい離れているかを表す為にあります |
書式 | size_t offsetof( struct_name, member_name ) |
---|---|
機能 | 構造体内で指定メンバまでのバイト数 |
引数 | struct_name : 構造体名 member_name : メンバ名 |
戻り値 | 指定されたメンバまでのバイト数を返します。 |
offsetof()マクロを使用して、構造体の指定されたメンバまで どれだけバイト数があるか調べてみます。 |
---|
#include <stdio.h> #include <stddef.h> struct test{ int a; float b; double c; int d; }; int main(void) { size_t sz = offsetof( struct test, d ); printf( "%d¥n", sz ); return 0; } |
16 |
---|
struct test型には、4バイトのint, float型と 8バイトのdouble型があります。 構造体のメンバ「d」までに16バイトがあることが分かります。 |