众所周知,在C语言中,不同的结构体的元素定义顺序,会影响一个该结构体类型变量在内存中占用的空间。
Antinomy表示要学习结构体的内存对齐,那就要紧跟时代步伐,至少也从位机学起,而不像某些野鸡考研书一样,从小霸王游戏机之类的
位机中学起。
结构体概念:
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。 在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同的类型,成员一般用名字访问。
声明一个结构体类型的一般形式为:
struct 结构体名 { 成员列表 };
Antinomy学习使用的是Microsoft c + + 32 位和64位编译器,Antinomy本次学习的结构体的涉及的数据类型,及其单个变量所占的字节个数:
内存对齐的部分规则:
举例1(一个该类型变量占用内存字节):
struct STUDENT { char name; int age; char addr; };
举例2(一个该类型变量占用内存字节):
struct STUDENT { char name; char addr; int age; };
Antinomy在学习过程中,需要一些例子,来证明“不同的结构体的元素定义顺序,会影响一个该结构体类型变量在内存中占用的空间”这个结论,于是他需要你来根据输入的未经过优化排序的结构体定义代码,优化后,输出一个优化过内存占用的结构体定义代码
输入最多行字符串,这
行字符串完整定义一个结构体
第一行输入两个字符串和一个字符(三者之间由一个空格隔开,前后无多余空格),第一个字符串包含个字符恒为
,第二个字符串为结构体名称变量
,最后一个字符恒为
其中定义成员的每一行,输入两个字符串变量和一个字符题目数据类型表格--成员类型,成员名称,该行最后恒定输入一个标志该行成员定义结束的字符
(
之间由一个空格隔开,该行前后以及分号之前无多余空格)
最后一行输入一个标结构体定义结束、仅包含两个符号的字符串恒为
(前后无多余空格)
输入最多
行字符串,定义一个优化内存过排布的结构体(多组答案输出其中一个即可)
输出格式同输入格式
1.编译器的默认对齐数 = 42.本题结构体中的成员并不会出现任何类型的数组