关于sizeof结构体大小的问题
答案:1 悬赏:40
解决时间 2021-01-26 16:41
- 提问者网友:沦陷
- 2021-01-26 04:43
关于sizeof结构体大小的问题
最佳答案
- 二级知识专家网友:像个废品
- 2021-01-26 04:52
肯定不对呀
在缺省对齐下我先给你说下三条准则吧,
【1】结构体变量的首地址能够被其最宽基本类型成员的大小所整除
【2】结构体每个成员相对于结构体首地址的偏移量是成员大小的整数背
【3】结构体的总大小为结构体最宽基本类型成员大小的整数背
以上都是结构体中只有基本类型时的缺省对齐方式,当有嵌套复合成员时,
【2】改为:复合成员相对于结构体首地址偏移量是复合成员最宽基本类型大小的整数背
所以分析你上面的
typedef struct node
{
int a[100];
char b;
}kkk;
先是第一成员400个字节,然后还有个char一个字节,为了满足第第三条准则,即总大小401为最宽基本类型的整数背,明显401不是最宽基本类型int(4)的整数背,所以总大小为404
再分析一个
typedef struct node
{
int a;
char b;
char c;
char d;
char e;
}kkk;
先是第一成员4个字节,第2---5成员1个字节,总共8个字节,满足要求。
如果按照你的错误理解,那么这个结构体就是20个字节了,显然是错误的。
希望楼主能理解,呵呵
在缺省对齐下我先给你说下三条准则吧,
【1】结构体变量的首地址能够被其最宽基本类型成员的大小所整除
【2】结构体每个成员相对于结构体首地址的偏移量是成员大小的整数背
【3】结构体的总大小为结构体最宽基本类型成员大小的整数背
以上都是结构体中只有基本类型时的缺省对齐方式,当有嵌套复合成员时,
【2】改为:复合成员相对于结构体首地址偏移量是复合成员最宽基本类型大小的整数背
所以分析你上面的
typedef struct node
{
int a[100];
char b;
}kkk;
先是第一成员400个字节,然后还有个char一个字节,为了满足第第三条准则,即总大小401为最宽基本类型的整数背,明显401不是最宽基本类型int(4)的整数背,所以总大小为404
再分析一个
typedef struct node
{
int a;
char b;
char c;
char d;
char e;
}kkk;
先是第一成员4个字节,第2---5成员1个字节,总共8个字节,满足要求。
如果按照你的错误理解,那么这个结构体就是20个字节了,显然是错误的。
希望楼主能理解,呵呵
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯