typedef struct
{
int a;
char b;
}Temp;
毫无疑问你用sizeof(Temp)得到的结果是8,int 占4字节 char占1字节,结构体对齐原则导致char的1字节向结构体成员的最小整数倍对齐。但是代码转换成如下呢?
typedef struct //结构体声明
{
int a;
char b;
static int a;
}Temp;
答案是编译会报错,因为static 修饰的变量在编译阶段要分配内存,而这个结构体仅仅只是一个声明,不会为这个声明而分配一个变量。在C语言中这是不允许的。
但是学过C++的朋友都知道。C++的类和结构体都是允许存在静态变量的,但是必须在类外或者结构体外进行初始化。如果用sizeof求它的大小呢?
typedef struct //结构体声明
{
int a;
char b;
static int c;
}Temp;
int Temp::c = 100;
结果还是8,所有用这个结构体声明的对象都共享这个c变量,其中一个对象更改其中的数据,会导致另外一个对象的c得到改变