C语言 结构体的内存分析

看过了之前的数组在内存中的存储方式,可以知道,一个数组中的各个元素之间的是一个接一个,连续存储的。所以今天谈到的结构体在内存中的存储方式也是这样的:一个接着一个,连续不断。并且在刚声明结构的时候,并没有立刻马上就在内存中划分存储空间,这时候仅仅只是声明。真正的划分内存空间是在声明之后的初始化结构(也就是赋值)的时候。

另外:还需要注意的就是补齐算法(对齐算法):结构体所占用的存储空间 必须是 最大成员字节数的倍数

include int main() { return 0; } // 补齐算法 void test1() { struct Student { int age;// 4个字节 char a; //char name; // 8个字节 }; struct Student stu; //stu.age = 20; //stu.name = "jack"; // 补齐算法(对齐算法) // 结构体所占用的存储空间 必须是 最大成员字节数的倍数 int s = sizeof(stu); printf("%d\n", s); } // 结构体内存细节 void test() { // 1.定义结构体类型(并不会分配存储空间) 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; d2.year = 2010; printf("%d - %d - %d\n", d1.year, d1.month, d1.day); printf("%d - %d - %d\n", d2.year, d2.month, d2.day); / printf("%p - %p - %p\n", &d1.year, &d1.month, &d1.day); int s = sizeof(d1); printf("%d\n", s); */ }

Hibbs

0