C++自定义数据类型
程序员可以根据需要为基本数据类型赋别名或基于一些基本数据类型定义新的复杂数据类型,这些类型被统称为自定义数据类型。C++语言常用的自定义数据类型有枚举、联合体、结构体等。
一、类型定义typedef
1、为基本数据类型赋别名
typedef unsigned char AGE;//定义类型名AGE,在整个项目中使用AGE定义表示年龄
2、定义指针类型
typedef int* IPointer; IPointer p1;//等价于 int* p1;
3、定义数组类型
typedef char NAME[9]; NAME name1;//等价于char name1[9];
二、枚举类型
C++语言将值域可枚举的数据定义成新的数据类型,这些数据类型被统称为枚举类型,值域的每个取值称为一个枚举元素。
enum 枚举类型名 {枚举常量1,枚举常量2,...,枚举常量n};
enum为定义枚举类型的关键字,枚举类型名和枚举常量需符合标识符命名规则。
示例:
#include<iostream> enum WeekDay {sun,mon,tue,wed,thu,fri,sat}; //默认:sun=0,mon=1,... //typedef enum {sun,mon,tue,wed,thu,fri,sat} WEEKDAY 定义时:WEEKDAY x; int main() { enum WeekDay x; //定义一个WeekDay类型的枚举变量x x=mon; //为x赋值,只能通过其枚举变量赋值,内部值为1 // x= 1;是错误的,因为两者类型不一致。 mon > sun; //结果为ture,1>0 mon > tue; //结果为false 1<2 std::cout << x << endl; //显示结果为1 return 0; }
三、联合体类型
联合体变量成员间共用内存单元,因此联合体也称为共用体类型。一个联合体变量所占用的字节数等于其最大成员的字节数。
1、联合体类型的定义和使用
union 联合体类型名
{
数据类型1 变量成员名1;
数据类型2 变量成员名2;
... ...;
数据类型n 变量成员名n;
};
给变量成员之间的数据类型可以相同,也可以不同,但变量名不能相同。访问联合体变量的下级成员语法形式是"联合体变量名.下级成员名",中间的圆点为成员运算符。
示例:
union Utype { char ch; int x; double y; }; void fun() { union Uytpe a; a.ch = 'A'; a.x = 10; a.y = 35.2; }//注意联合体在同一时刻只能保存一个成员的数据,注意数据丢失时间。
2、使用typedef命名联合体类型
typedef union { char ch; int x; double y; } UTYPE; UTYPE a,b;
四、结构体类型
1、定义结构体类型
struct 结构体类型名
{
数据类型1 变量成员名1;
数据类型2 变量成员名2;
... ...;
数据类型n 变量成员名n;
};
struct为定义结构体关键字,给变量成员之间的数据类型可以相同,也可以不同,但变量名不能相同。
1)同一结构体可以定义多个变量。
2)不同结构体定义的结构体变量将包含不同的下级成员。
3)结构体的内存分配空间是所有下级变量空间的和。
4)访问结构体变量的下级成员语法形式是"结构体变量名.下级成员名",中间的圆点为成员运算符。
示例:
struct Student { char ID[11],Name[9]; int Age; double Score; };
2、结构体指针与结构体数组
1) 结构体指针
struct Student a; struct Student *p; p=&a;//*p和a等价,(*p).ID和a.ID等价
指针变量和被访问的变量应具有相同结构体类型,指针变量需要先赋值,在访问下级成员。
2)结构体数组
struct Student x[10];
3、使用typedef命名结构体类型
typedef struct { char ID[11],Name[9]; int Age; double Score; }STUDENT; STUDENT a,b;
结构体变量初始化:STUDENT a = {"123456","Kylin",18,85};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?