結構體成員的偏移量與offsetof函式

2021-07-30 11:15:08 字數 719 閱讀 5588

1.一旦結構體定義下來,則結構體中的成員記憶體布局就定下了。

typedef struct test

testmem;

void test()

2.offsetof函式

巨集函式offset,用於求結構體中的乙個成員,在結構體中的偏移量

在stddef.h

標頭檔案中,該巨集的完整說明如下:

#ifdef

__cplusplus

#ifdef _win64

#define offsetof(s,m) (

size_t

)( (

ptrdiff_t

)&reinterpret_cast((((s *)0)->m)) )

#else

#define offsetof(s,m) (size_t)&reinterpret_cast((((s *)0)->m))

#endif

#else

#ifdef

_win64

#define offsetof(s,m) (

size_t

)( (

ptrdiff_t

)&(((s *)0)->m) )

#else

#define offsetof(s,m) (size_t)&(((s *)0)->m)

#endif

#endif /* __cplusplus */

結構體成員變數偏移量

我們先來定義一下需求 已知結構體型別定義如下 struct node t 且結構體1byte對齊 pragma pack 1 求 結構體struct node t中成員變數c的偏移。注 這裡的偏移量指的是相對於結構體起始位置的偏移量。有三種方法 1.使用巨集offsetof 2.定義乙個結構體,用結...

C C 結構體成員偏移量獲取

分析 節選自muduo.以下 通過offsetof獲取sin family在sockaddr in6中的字段偏移量.static assert offsetof sockaddr in6,sin6 family 0,sin6 family offset 0 需要注意 offsetof並非c c 標準...

計算結構體偏移量

如果能夠讓 unsigned long type 的值為0,即 type 0的時候,那麼offset的值就是簡單的 offset unsigned long type.c 如果說 type 0,那麼type.c就可以等價於 type t 0 c。但是這個語句是不能單獨存在的,因為對null指標訪問成...