struct a { struct b { int i; float j; }x; struct c { int k; float l; }y; }z;
任何人都可以解释我如何找到int的偏移量,我们可以找到int i ????的地址
解决方法
使用offsetof()从z开始或从x的开始找到偏移量.
offsetof() – 结构成员的偏移量
概要
#include <stddef.h> size_t offsetof(type,member);
offsetof()返回字段成员的偏移量
开始结构类型.
例
#include <stddef.h> #include <stdio.h> #include <stdlib.h> int main(void) { struct s { int i; char c; double d; char a[]; }; /* Output is compiler dependent */ printf("offsets: i=%ld; c=%ld; d=%ld a=%ld\n",(long) offsetof(struct s,i),c),d),a)); printf("sizeof(struct s)=%ld\n",(long) sizeof(struct s)); exit(EXIT_SUCCESS); }
您将获得以下OUTPUT在Linux上,如果您使用GCC编译.
offsets: i=0; c=4; d=8 a=16 sizeof(struct s)=16