1. 关于struct
struct T;
struct S{
char b ;
int a ;
char c;
T* t; OK! T*的大小在编译时可以确定
//T t; wrong !T的大小在编译时不能确定,必须在定义S 之前定义T
} x ;
2. offsetof 宏可以确定某个成员在结构或者类中的位置,定义于 stddef.h
offsetof(type,member)
其中,type :类型
member: 成员名
表达式的结果 size_t,表示指定成员开始存储的位置距离结构或类开始存储位置偏移几个字节
#include <iostream>
struct S{
char b ;
int a ;
char c;
} x ;
void main(){
printf("offsetof(S,c) %d\n",offsetof(S,c));
printf("&((S*)0)->c %d\n",&((S*)0)->c);
printf("&S::c %d\n",&S::c);
}
以上三个表达式的结果是一样的:
offsetof(S,c) 8
&((S*)0)->c 8
&S::c 8
3. 联合变量初始化时,初始值必须是联合的第一个成员的类型