黑马程序员技术交流社区

标题: sizeof(A)A是结构体问题 [打印本页]

作者: 伏案灯火    时间: 2015-6-8 11:46
标题: sizeof(A)A是结构体问题
struct A{
int a;
char b;
int c;
}

sizeof(A)结果是多少啊,怎么算的?
作者: 白0702    时间: 2015-6-8 12:03
这个是结求构体内存大小问题,这个遵循模数对齐,模数为所有数据类型中内存长度最大的一个,这里int占4个字节char占1个字节,所以模数为4,因此计算出的结构体内存大小为12.
作者: 伏案灯火    时间: 2015-6-8 12:17
白0702 发表于 2015-6-8 12:03
这个是结求构体内存大小问题,这个遵循模数对齐,模数为所有数据类型中内存长度最大的一个,这里int占4个字 ...

那如果
struct A{
int a;
int b;
char c;
}
sizeof(A)也是12吗?
作者: 天下1083    时间: 2015-6-8 12:25
围观学习
作者: aofex    时间: 2015-6-8 13:46
学习 学习   
作者: cui0wei0    时间: 2015-6-8 14:12
伏案灯火 发表于 2015-6-8 12:17
那如果
struct A{
int a;

还是12,但是只是恰好还是12,如果换成别的,还会变
作者: 白0702    时间: 2015-6-8 16:54
伏案灯火 发表于 2015-6-8 12:17
那如果
struct A{
int a;

对,还是12.如果你换成这样:
struct A{
char a;
char b;
int  c;
}
那么结构体的内存大小就为8了,因为char a和char b都占一个字节,两个字节可以合并到一个内存空间里(这个内存空间为4字节的)。
作者: 伏案灯火    时间: 2015-6-8 17:00
白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;
}
这样的呢,结构体中套结构体?大神
作者: 伏案灯火    时间: 2015-6-8 17:02
白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;
}
这样的呢,结构体中套结构体?大神
作者: talent123    时间: 2015-6-8 17:38
伏案灯火 发表于 2015-6-8 17:02
如果是
struct A
{

试了试 超过4 就往上跳4
你这个A是12
B是 12 + 4 + 1 -> 12 + 4 + 4 = 20




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2