【C++】自定义数据类型


自定义数据类型

标签:c++


目录
  • 自定义数据类型
    • 一、结构体
      • 定义方法:
      • 特点:
      • 成员访问方式:
      • 初始化:
      • 结构数组
      • 指针和动态内存分配:
      • 结构变量作为函数参数:
    • 二、联合
      • 定义方法:
      • 特点:
      • 举例:
    • 三、枚举
      • 定义方法:
      • 作用:
    • 四、用typedef定义数据类型
      • 用法:
      • 作用:

一、结构体

定义方法:

结构名 变量名

特点:

  • 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用“<”,“==”等运算符,如果使用则需要对运算符重载
  • 内存分配情况:地址对齐
  • 结构的成员变量可以是任何类型的,包括基本类型、结构体、结构体指针等

成员访问方式:

  • 通过结构变量名:结构变量名.成员变量名

  • 通过结构体指针:指针->成员变量名 或 (*指针).成员变量

    点运算符的前体是变量名,箭头的是指针(助记:指针很像箭头)

初始化:

  • 定义时按照成员变量的顺序和格式列举初始化
  • 用另外一个同类型的结构体初始化

结构数组

结构名 数组名[数组元素个数]

指针和动态内存分配:

指针的用法同一般情况

动态内存分配:

StructName *p;

p = new StructName[N];

结构变量作为函数参数:

  • 值传递,需要将实参复制到形参,结构体积大的时候效率很低

  • 地址传递,传递指针

  • 引用传递(c++特有)

二、联合

定义方法:

union 联合名

{

类型名1 成员变量名1;

类型名2 成员变量名2;

……

}

特点:

成员变量从相同的起始地址分配内存,对一个成员变量赋值会改变其余成员变量的值

举例:

#include
using namespace std;
union Register
{
    unsigned int word;
    struct
    {
        unsigned short L;
        unsigned short H;
    }data;
};
int main()
{
    Register AX;
    AX.word = 0x12345678;
    AX.data.H = 0x9999;
    cout<

三、枚举

定义方法:

enum 枚举类型名{枚举值1,枚举值2,……};

枚举类型名 变量名;

作用:

宏定义的集合

四、用typedef定义数据类型

用法:

typedef 类型名 类型别名;

作用:

简化变量类型名

typedef void(*myFunction)(int n, char c, const char* s);
myFunction p1;
myFunction p2;