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

目录

一,struct

1)结构及一般使用方法

2)无名结构体

3)巧用typedef

4)struct小细节

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

二,enum

1)结构及一般使用方法

2)enum的作用和优点

三,union

1)结构

2)特点


一,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;

C/C++自定义类型(详解struct,enum,union)_第1张图片

二,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)特点

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

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

你可能感兴趣的:(c语言,c++,linux)