A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 伏案灯火 中级黑马   /  2015-6-8 11:46  /  992 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

struct A{
int a;
char b;
int c;
}

sizeof(A)结果是多少啊,怎么算的?

9 个回复

倒序浏览
这个是结求构体内存大小问题,这个遵循模数对齐,模数为所有数据类型中内存长度最大的一个,这里int占4个字节char占1个字节,所以模数为4,因此计算出的结构体内存大小为12.
回复 使用道具 举报 1 0
白0702 发表于 2015-6-8 12:03
这个是结求构体内存大小问题,这个遵循模数对齐,模数为所有数据类型中内存长度最大的一个,这里int占4个字 ...

那如果
struct A{
int a;
int b;
char c;
}
sizeof(A)也是12吗?
回复 使用道具 举报
围观学习
回复 使用道具 举报
学习 学习   
回复 使用道具 举报
伏案灯火 发表于 2015-6-8 12:17
那如果
struct A{
int a;

还是12,但是只是恰好还是12,如果换成别的,还会变
回复 使用道具 举报
伏案灯火 发表于 2015-6-8 12:17
那如果
struct A{
int a;

对,还是12.如果你换成这样:
struct A{
char a;
char b;
int  c;
}
那么结构体的内存大小就为8了,因为char a和char b都占一个字节,两个字节可以合并到一个内存空间里(这个内存空间为4字节的)。
回复 使用道具 举报
白0702 发表于 2015-6-8 16:54
对,还是12.如果你换成这样:
struct A{
char a;

如果是
struct A
{
int a;
int b;
char c;
}

struct B
{
A _a;
int c;
char d;
}
这样的呢,结构体中套结构体?大神
回复 使用道具 举报
白0702 发表于 2015-6-8 16:54
对,还是12.如果你换成这样:
struct A{
char a;

如果是
struct A
{
int a;
int b;
char c;
}

struct B
{
A _a;
int c;
char d;
}
这样的呢,结构体中套结构体?大神
回复 使用道具 举报

试了试 超过4 就往上跳4
你这个A是12
B是 12 + 4 + 1 -> 12 + 4 + 4 = 20
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马