结构体知识点(待补充)-创新互联

为什么需要用结构体类型

我们已学习了数组,数组中的各元素是属于同一类型的。但是在处理任务时只有数组远远不够。有时需要将不同类型的数据组合成一个有机的整体,反应这些数据间的内在联系。因此需要结构体类型。

成都创新互联公司是一家集网站建设,铜川企业网站建设,铜川品牌网站建设,网站定制,铜川网站建设报价,网络营销,网络优化,铜川网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

例如,一个学生的学号(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???

要掌握如何计算结构体大小,首先得掌握结构体的对齐规则

结构体的对齐规则
  1. 第一个成员在与结构体偏移量为0的地址处。

  1. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。(对齐数=编译器默认的一个对齐数与该成员大小的较小值)

  1. 结构体总大小为大对齐数(每个成员变量都有一个对齐数)的整数倍。

  1. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的大对其数的整数倍处,结构体的整体大小就是所有大对齐数(含嵌套结构体的对齐数)的整数倍。

为什么存在内存对齐?
    • 平台原因(移植原因):

不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

2.性能原因:

数据结构(尤其是栈)应该尽可能地在自然边界上对齐。

原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

总的来说,结构体内存对齐是拿空间换时间的做法。

那么在设计结构体的时候,如果既要满足对齐,又要节省空间,

让占用空间小的成员尽量集中在一起。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文标题:结构体知识点(待补充)-创新互联
本文网址:http://scyanting.com/article/ceppps.html