1. 程式人生 > >計算C結構體成員偏移量兩種方式本質上是一樣的

計算C結構體成員偏移量兩種方式本質上是一樣的

BE main print tdd of函數 pan color c結構體 計算

#include <stdio.h>
#include <stddef.h>
typedef struct test_st {
    char a[3];
    char b[13];
    int *p;
}test_t;
#define OFFSET(type,member) ((size_t)(&(((type *)0)->member)))
int main()
{
    printf("a:offset\t:%ld \t2:%ld\n",offsetof(test_t, a),OFFSET(test_t, a));
    printf(
"b:offset\t:%ld \t2:%ld\n",offsetof(test_t, b),OFFSET(test_t, b)); printf("p:offset\t:%ld \t2:%ld\n",offsetof(test_t, p),OFFSET(test_t, p)); return 0; }

結果:

a:offset    :0     2:0
b:offset    :3     2:3
p:offset    :16     2:16
offsetof函數在linux中實現方式與這個宏一致。

計算C結構體成員偏移量兩種方式本質上是一樣的