C/C++自定义类型(详解struct,enum,union)

简介: C/C++自定义类型(详解struct,enum,union)



一,struct

1)结构及一般使用方法
struct name{//名称
    //数据类型
      int a;
      char b;
      float c;
};//注意有分号,可在'}'后面,';'前面直接创建变量
struct name xiao={666,'s',3.14};//利用名称创建变量
2)无名结构体

无名结构体就是没有名称,意味着,除了在'}'后面,';'前面直接创建变量,无法在其他地方创建变量。

3)巧用typedef

利用typedef能够给struct起一个别名,起到简化程序,使代码可读性更强,

typedef struct name{
      int a;
      char b;
      float c;
}han;
struct name xiao={666,'s',3.14};
han kun={666,'s',3.14};//han等于struct name;
4)struct小细节

struct 在创建变量前是不会分配内存空间的。struct在'}'后面,';'前面直接创建的变量是全局变量。

5)补充内存对齐(提高程序可移植性,提高运行效率)

先讲解内存对齐:

首先理解内存对齐规则:

1)第一个数据的偏移量为0(偏移量为距离首字节的距离)

2)每个数据的存储位置必须是这个数据的对齐数的整数倍字节位置(对齐数为系统默认的对齐数和自身字节大小中的较小值。

3)最后内存必须是结构体中数据中最大对齐数的整数倍。

4)如果嵌套了结构体,则这个结构体的对齐数是结构体中数据中最大的对齐数

5)如果是数组的话对齐数是数组类型,但是空间必须大于数组,而且是对齐数整数

接下来看题讲解

//求AA_t大小
typedef struct{
  int a;
  char b;
  short c;
  short d;
}AA_t;

二,enum

1)结构及一般使用方法
enum name{//名称
  //数据
  int a,//默认第一个为0,往下每次递增1
  int b,//b=1
  int c=6,//可以自行赋值,往下每次递增1
  int d  //d=7
}name1;//也可在创建变量
 
enum name name2=3;//创建变量
2)enum的作用和优点

类似于宏,相当于其起别名,但它有自己的优点:

  1. 增加代码的可读性和可维护性
  2. #define定义的标识符比较枚举有类型检查,更加严谨。
  3. 便于调试
  4. 使用方便,一次可以定义多个常量

三,union

1)结构
union name{//名称
  //数据成员
  int a;
  char c;
}name1;//类推可以创建变量
union name name2;//创建变量
2)特点

所有成员共用一块空间,所有它们不能数据成员同时存在,改变一个数据成员所有的数据成员都会改变,数据成员的地址都一样。

篇外:由于篇幅有限,如果有不了解的概念等,可以评论区告诉我,我会为诸位一一解答

相关文章
|
7月前
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
90 2
|
6月前
|
存储 数据管理 程序员
C++一分钟之-结构体与联合体(Union)
【6月更文挑战第20天】在C++中,结构体(struct)用于组合多种数据类型形成复合类型,成员变量占用独立内存,适合存储不同类型且同时有效的数据。联合体(union)则让所有成员共享同一内存,适合节省空间和进行低级别类型转换,但需小心数据覆盖。通过`struct`和`union`,程序员能构建更灵活的代码,但也需留意内存对齐和数据管理等问题。
89 2
|
6月前
|
存储 安全 API
C++一分钟之-C++中的枚举类型(enum class)
【6月更文挑战第25天】C++的`enum class`(强类型枚举)在C++11中引入,增强了枚举的作用域和类型安全,减少命名冲突。它要求使用全名(如`Color::Green`)访问枚举成员,并能显式指定底层类型。常见问题包括默认值非0、隐式转换和范围溢出,解决办法是明确赋值、显式转换和选择合适底层类型。高效技巧包括用于状态机、作为函数参数、创建别名和迭代。掌握这些能提升代码质量。
217 0
|
7月前
|
程序员 测试技术 C++
[C++] enum枚举类型用法
[C++] enum枚举类型用法
109 0
|
7月前
|
C++
【C++基础】结构struct
【C++基础】结构struct
31 0
|
7月前
|
编译器 C语言 C++
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
41 0
C4.
|
7月前
|
C++ 开发者
C++ struct与class
C++ struct与class
C4.
48 0
|
7月前
|
C++ 开发者
类和对象一封装一c++中class和struct的区别
类和对象一封装一c++中class和struct的区别
35 0
|
7月前
来自C++primer5 的struct和class定义类的区别
来自C++primer5 的struct和class定义类的区别
35 0
|
7月前
|
存储 C++
[C++] 结构体Struct类型和变量定义
[C++] 结构体Struct类型和变量定义
123 0