struct stru ;
printf("offset of stru.i: %ld\n", (size_t)((char*)&s.i - (char*)&s));
printf("&((struct stru *)0)->i: %ld\n", (size_t)&((struct stru*)0)->i);
標準庫中定義了函式offsetof(type,member)
,直接使用即可。offsetof(type,member)
其實是乙個巨集定義,第乙個引數是結構體的型別,第二個引數是所求的成員名。示例**如下:
#include printf("offsetof(struct stru,i): %ld\n", offsetof(struct stru, i));
完整的測試程式
#include #include struct stru ;
int main(int argc, char *ar**)
以下**段取自我電腦上的
/usr/src/linux-headers-4.8.0-49/include/linux/stddef.h
,可以看到
linux 的實現方法。
#undef offsetof
#ifdef __compiler_offsetof
#define offsetof(type, member) __compiler_offsetof(type, member)
#else
#define offsetof(type, member) ((size_t)&((type *)0)->member)
#endif
C語言根據結構體成員變數的位址,得到結構體的位址
看nginx 時發現雙鏈表使用的是這種方法,記錄一下 給出乙個例項來說明 struct father t f char ptr f.b 而不是 ptr f.b 這裡ptr是b的位址,而不是它指向的位址。根據c語言對struct型別的儲存特性,我們可以畫這麼乙個圖示 通過分析圖示,我們可以看出,我們只...
獲取結構體某成員偏移
本身這個問題非常簡單,直接用位址差值即可求得,最近在某本書上看到了乙個非常牛的方法,第一次看還將信將疑覺得不太可能,後面上機驗證發現確實可以,如下 1 include iostream 23 using namespace std 45 6struct test7 1314 define find ...
c語言結構體的偏移 c
c語言中關於結構體的位置偏移原則簡單,但經常忘記,做點筆記以是個記憶的好辦法 原則有三個 a.結構體中的所有成員其首位址偏移量必須為器資料型別長度的整數被,其中第乙個成員的首位址偏移量為0,例如,若第二個成員型別為int,則其首位址偏移量必須為4的倍數,否則就要 首部填充 以此類推 b.結構體所佔的...