sizeof是一个关键字,用来计算类型的大小,如int占用4个字节等....
主要有两个注意的方面:
一:字节对齐
从结构体的第一个变量开始讲究对齐,以字节为单位;
二:字节对齐要满足3个准则:
a.结构体的第一个变量能够被最宽的基本类型成员的大小所整除;
b.结构体每个成员相对于结构体首地址的偏移量都是当前成员大小的整数倍;不够在后面填充;
c.结构体的总大小一定要是最宽基本类型的整数倍,不够的话在末成员后面添加填充;
struct s1
{
int i;
char *sz;
double t;
};
struct s2
{
int w;
double z;
char *sx;
};
printf("sizeof(s1):%d", sizeof(s1)); //16
printf("sizeof(s2):%d", sizeof(s2)); //24
解释:第一个结构的大小i 为4个字节,char* 为4个字节,double为8个字节,字节对齐都工整,所以是16个字节
|--------int--------|-------char*--------| 8字节
|------------------double---------------| 8字节
第二个结构的大小w是4个字节,z是8个字节,sx是4个字节,总数确实16个字节
|--------int--------|---------------------| 8字节
|---------------- double---------------| 8字节
|--------char*----|---------------------| 8字节