本文已整合到C语言标准库深度解读
stddef.h中定义了三个数据类型,size_t,wchar_t和ptrdiff_t。
其中size_t是sizeof的结果,一般是long unsigned int;wchar_t用于描述宽字符,一般是int。
ptrdiff_t是指针相减的数据类型,stddef.h还定义了一个宏函数offsetof,用于确定结构的某个成员到起始位置的偏移字节。
ptrdiff_t
对于ptrdiff_t,例如
#include <stdio.h>
#include <stddef.h>
int main(){
char x[20];
ptrdiff_t nx = &x[5]-&x[0];
printf("%d\n", nx); //输出为5
long int y[20];
ptrdiff_t ny = &y[5]-&y[1];
printf("%d\n", ny); //输出为4
return(0);
}
指针相减
通过指针相减的方式,当然可以得到结构中某个字段距离结构体初始指针的距离
#include <stdio.h>
#include <stddef.h>
typedef struct TEST{
int a,b;
}test;
int main(){
test x;
static size_t off = (char*)&x->b - (char*)&x;
}
如果想在不创建示实例的情况下得到字段b到test初始值的偏离,可以可以采用offsetof
函数
static size_t off = offsetof(test, b)