上一节, 我们简单的介绍了结构体的一些知识点, 以及一些注意的事项, 这次我们来看看结构体是怎么样在内存存储的~
我们来看一个小例子:
#include <stdio.h>
int main()
{
struct Date
{
int year;
double dou;
int month;
int day;
};
struct Date D = {2014, 1.2, 9, 10};
int c = sizeof(D);
printf("size = %d\n", c);
return 0;
}
输出的结果;
按照我们对类型来算, 3个int类型是12, 再加上一个double类型, 应该是20才对, 那为什么会24呢?
其实啊, 在结构体里, 是按照最长的类型倍数来存储的, 而这4个类型里面最长的就是double, 所以是输出24, 看看下面的示意图吧;
在结构体上, 这样子叫做对齐算法, 也可以成为补齐算法, 以最大的那个类型的倍数来存储, 不够存就添加都一个最长的, 哪怕是多余, 也不会理会~~
下面还有一个例子:
#include <stdio.h>
int main()
{
struct Date
{
int year;
int month;
int day;
};
// 2.定义结构体变量(真正分配存储空间)
struct Date d1 = {2011, 4, 10};
struct Date d2 = {2012, 8, 9};
// 会将d1所有成员的值对应地赋值给d2的所有成员
d2 = d1;
printf("d1 = %d - %d - %d\n", d1.year, d1.month, d1.day);
printf("d1的地址为:%p\n", &d1);
printf("d2 = %d - %d - %d\n", d2.year, d2.month, d2.day);
printf("d2的地址为:%p\n", &d2);
return 0;
}
输出的结果:
虽然代码里d1把值都赋给了d2, 但是它们也是互不相关的, 它们两个是独立的两个整体, 在后面随意怎么修改它们任意一个的值, 另一个也不会因为这样子而改变里面的值.
好了, 这次我们就讲到这里, 下次我们继续~~~