结构体struct
【摘要】 结构体结构体可以由多个不同类型的成员变量组成,是一种自定义数据类型,从C语言继承而来,具有了一些类的特性。 结构体定义 C结构体定义定义结构体与定义结构体变量分离// 使用struct关键字进行定义结构体变量struct Demo{ int member1; int member2;};struct Demo value = {0,1};定义结构体时同时定义结构体变量// 直接...
结构体
结构体可以由多个不同类型的成员变量组成,是一种自定义数据类型,从C语言继承而来,具有了一些类的特性。
结构体定义
C结构体定义
- 定义结构体与定义结构体变量分离
// 使用struct关键字进行定义结构体变量
struct Demo
{
int member1;
int member2;
};
struct Demo value = {0,1};
- 定义结构体时同时定义结构体变量
// 直接只定义一个结构体变量
struct
{
int member1;
int member2;
}value = {0,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;//赋值
结构体其他内容
- struct与class类似,拥有访问权限,包括:private,protected,public。但是struct的默认权限是public,而class的默认权限是private;
- struct与class一样,也可以定义内部函数。
- struct依然遵守字节对齐原则。
- struct可以嵌套struct,也可以嵌套union。
对齐方式
- 结构体大小
// 结构体大小是12
struct Demo1
{
char member1;
int member2;
char member3;
};
- 设置对齐大小
// 结构体大小是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。
结构体对齐大小:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)