stddef.h
定义了一些标准宏和变量,
标准宏有
NULL
这个定义大家应该都比较熟悉了,是这样子的((void *)0)
offsetof()
这个宏的定义是这样子的offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)
,主要是用来求结构体中某个成员变量在该结构体中的偏移量,这里的TYPE
就是该结构体,MEMBER
就是该成员变量,(TYPE *)0
就是说把该结构体的首地址当作0地址,那么(TYPE *)0->MEMBER
自然就是该元素的偏移量了,这里可以参考这篇文章,对offsetof
有一个很深入的讲解offsetof(s,m)解析
变量有
1.size_t
《深入理解C指针》一书中对size_t
的描述如下size_t 类型表示C 中任何对象所能达到的最大长度。它是无符号整数,因为负数在这里没有意义。它的目的是提供一种可移植的方法来声明与系统中可寻址的内存区域一致的长度。size_t 用做sizeof 操作符的返回值类型,同时也是很多函数的参数类型,包括malloc 和strlen。
在声明诸如字符数或者数组索引这样的长度变量时用size_t 是好的做法。它经常用于