结构体struct

举报
小糖饼最甜呀 发表于 2022/02/25 09:01:54 2022/02/25
【摘要】 结构体结构体可以由多个不同类型的成员变量组成,是一种自定义数据类型,从C语言继承而来,具有了一些类的特性。 结构体定义 C结构体定义定义结构体与定义结构体变量分离// 使用struct关键字进行定义结构体变量struct Demo{ int member1; int member2;};struct Demo value = {0,1};定义结构体时同时定义结构体变量// 直接...

结构体

结构体可以由多个不同类型的成员变量组成,是一种自定义数据类型,从C语言继承而来,具有了一些类的特性。

结构体定义

C结构体定义

  1. 定义结构体与定义结构体变量分离
// 使用struct关键字进行定义结构体变量
struct Demo
{
    int member1;
    int member2;
};
struct Demo value = {0,1};
  1. 定义结构体时同时定义结构体变量
// 直接只定义一个结构体变量
struct
{
    int member1;
    int member2;
}value = {0,1};;
// 因结构体为匿名结构体,后续无法再定义该结构体类型的变量
  1. typedef方式
// 使用typedef关键字进行定义结构体类型
typedef struct
{
    int member1;
    int member2;
} Demo;
// typedef方式,可以用Demo直接定义结构体变量
Demo value = {0,1};

C++结构体定义

struct Demo
{
    int member1;
    int member2;
};
Demo value = {0,1};

C++结构体不再需要使用struct或者typedef方式进行结构体变量定义,而是直接使用结构体名称直接定义即可。

结构体嵌套定义

结构体内部可以嵌套结构体。

C结构体嵌套定义

struct Demo1
{
    int member1;
    int member2;
};
struct Demo2
{
    int member;
    struct Demo1 demo;
};

C++结构体嵌套定义

struct Demo1
{
    int member1;
    int member2;
};
struct Demo2
{
    int member;
    Demo1 demo;
};

结构体成员访问

C访问

// 结构体Demo定义
struct Demo
{
    int member1;
    int member2;
};
// 结构体Demo变量
struct Demo value = {0,0}// 变量定义与初始化
value.member1 = 1;//赋值
value.member2 = 2;//赋值

C++访问

C++中,结构体与类相似,但是结构体成员默认是public权限,可以直接访问。

// 结构体Demo定义
struct Demo
{
    int member1;
    int member2;
};
// 结构体Demo变量
Demo value = {0,0}// 变量定义与初始化
value.member1 = 1;//赋值
value.member2 = 2;//赋值

结构体其他内容

  1. struct与class类似,拥有访问权限,包括:private,protected,public。但是struct的默认权限是public,而class的默认权限是private;
  2. struct与class一样,也可以定义内部函数。
  3. struct依然遵守字节对齐原则。
  4. struct可以嵌套struct,也可以嵌套union。

对齐方式

  1. 结构体大小
// 结构体大小是12
struct Demo1
{
    char member1;
    int member2;
    char member3;
};
  1. 设置对齐大小
// 结构体大小是8
#pragma pack (2)
struct Demo1
{
    char member1;
    int member2;
    char member3;
};
// 结构体大小是12
#pragma pack (4)
struct Demo1
{
    char member1;
    int member2;
    char member3;
};
// 结构体大小是12
#pragma pack (8)
struct Demo1
{
    char member1;
    int member2;
    char member3;
};

结构体成员最大的size1与#pragma pack指定的size2,两者的最小值,就是最终结构体对齐的size。


结构体对齐大小:

对齐大小 s i z e = { s i z e 1 ( s i z e 1 < s i z e 2 ) : / / 结构体成员最大的 s i z e 1 s i z e 2 ( s i z e 1 > s i z e 2 ) : / / # p r a g m a p a c k 指定的 s i z e 2 对齐大小size = \begin{cases} size1(size1 < size 2):// 结构体成员最大的size1\\ size2(size1 > size 2):// \#pragma pack指定的size2\\ \end{cases}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。