结构体知识点(待补充)-创新互联
我们已学习了数组,数组中的各元素是属于同一类型的。但是在处理任务时只有数组远远不够。有时需要将不同类型的数据组合成一个有机的整体,反应这些数据间的内在联系。因此需要结构体类型。
成都创新互联公司是一家集网站建设,铜川企业网站建设,铜川品牌网站建设,网站定制,铜川网站建设报价,网络营销,网络优化,铜川网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。例如,一个学生的学号(num)、姓名(name)、性别(sex)、年龄(age)、家庭住址(address)等,都是这个学生的属性。
struct Student //声明一个结构体类型Student,struct是声明结构体类型必须使用的关键字
{
int num;//包括一个整型变量num
char name[20];//包括一个字符数组name,可以容纳20个字符
char sex[4];//包括一个字符数组sex,可以容纳4个字符
int age;//包括一个整型变量age
char address[20];//包括一个字符数组address,可以容纳20个字符
};
这样,程序设计者就声明看一个新的结构体类型Student。Student成为一个在本程序文件中可以使用的类型名,它和系统提供的基本类型(int,char,float,double等)一样,都可以用来定义变量,只不过结构体类型需要事先有用户自己声明而已。
声明一个结构体类型的一般形式为
struct 结构体类型名
{成员表};
结构体类型名用来作结构体类型的标志。上面的声明中Student 是结构体类型名,花括号内是该结构体中是全部成员(member),由它们组成了一个特定的结构体。上例中的num,name,sex等都是结构体的成员。在声明一个结构体类型是必须对各成员都进行类型声明,即
类型名 成员名;
每一个成员也称为结构体中的一个域(filed)。成员表又称为域表。
结构体类型变量的定义方法及其初始化前面只是指定了一种结构体类型,它相当于一个模型,但其中并无数据,系统对之也不分配实际内存单元。
- 定义结构体类型变量的方法
可以采取一下三种方法
(1)如上面已定义了一个结构体类型Student,可以用它来定义结构体变量。如Student s1,s2;
以上定义了s1和s2为结构体类型Student的变量,即它们具有Student类型的结构。
在定义结构体变量后,系统会为之分配内存单元。
(2)在声明类型的同时定义变量struct Student
{
int num;
char name[20];
char sex[4];
int age;
char address[20];
}s1,s2;//定义两个结构体类型Student的变量s1,s2
(3)结构体内存对齐(计算结构体大小)先尝试计算一下一个结构体A的大小
struct A
{
int A_a;
char A_b;
};
int main()
{
cout<
运行结果竟然不是5,而是8???
要掌握如何计算结构体大小,首先得掌握结构体的对齐规则
结构体的对齐规则第一个成员在与结构体偏移量为0的地址处。
其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。(对齐数=编译器默认的一个对齐数与该成员大小的较小值)
结构体总大小为大对齐数(每个成员变量都有一个对齐数)的整数倍。
如果嵌套了结构体的情况,嵌套的结构体对齐到自己的大对其数的整数倍处,结构体的整体大小就是所有大对齐数(含嵌套结构体的对齐数)的整数倍。
- 平台原因(移植原因):
不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。
原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。
总的来说,结构体内存对齐是拿空间换时间的做法。
那么在设计结构体的时候,如果既要满足对齐,又要节省空间,
让占用空间小的成员尽量集中在一起。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站名称:结构体知识点(待补充)-创新互联
文章地址:http://cdiso.cn/article/ceppps.html