1.数据类型:
1.整型/浮点型/字符型/布尔型
2.数组
3.指针:普通指针/数组指针/函数指针
4.引用
(地图/英雄/玩家/怪物/NPC/药品:)
2.自定义类型:结构体(struct)/联合(union)/枚举(enum)
3.结构体类型的定义:
struct 结构体类型名 //结构体类型名:首字母大写
{
属性1;//属性:类型 变量名;(符合"有"字)
属性2;
…
属性n;
}; // {} 和 ; 不能省略
4.结构体的内存:(变量占内存,类型不占内存)
1.所有属性内存之和;
2.自定义类型:内存对齐原则
1.以所有属性中 基本数据类型最大字节 分配内存
2.所有的变量存储在所占字节的整数倍上
3.注意写法:按照内存大小从小到大排列(节省内存)
struct Hero //Hero是一种数据类型
{
char name[15];
int lv;
int hp;
}
cout << sizeof(Hero) << endl;//24 4*6
5.结构体变量的定义:结构体类型名 变量名;
6.访问结构体中的属性(数据成员):
.(成员选择符):变量名.属性名;//例如:hero.hp;
7.给结构体变量初始化:{属性值1,属性值2,…属性值n}
8.结构体指针:结构体类型* 指针名;
9.通过变量访问成员: . (成员选择符)
通过指针访问成员: -> (成员选择符)
10.结构体数组:结构体类型 数组名[数组大小];
----------------------------------
联合:所有的成员共享一段内存;(数据传输)
1.联合的定义:
union 联合类型名
{
成员1;//类型 变量名;
成员2;
…
成员n;
};
2.联合的内存:内存对齐
怎么判断大端还是小端模式?
1.定义一个联合
union U
{
short c[2];
int a;
}
U u;
u.a = 0xabcd1234;
打印u.c[0],如果为1234,为小端模式,如果为abcd,则为大端模式.
2. int a = 0xabcd1234;
short* p = &a;
cout<<hex<<*p<<endl;
如果为1234,为小端模式,如果为abcd,为大端模式;
union U //c和a共享一段内存
{
char c[2];
short a;
};
U u;
u.c[0] = -1;
u.c[1] = 1;
cout << u.a << endl;//ff 01 从后往前读: 511
u.a = 0xabcd;
cout << hex << (int)u.c[0] << endl;//(整型提升 补符号位 cd二进制第一位是1)ffffffcd
cout << hex << (int)u.c[1] << endl;//ffffffab
cout << sizeof(U) << endl;//2
----------------------------------
枚举:表示有限数量个状态;
1.方向:上下左右
2.游戏状态:开始/暂停/游戏中/结束
3.物品种类:消耗品/装备
1.枚举的定义:
enum 枚举类型名
{
状态1,//例如:UP/DOWN/RIGHT/LEFT
状态2, DRUG/EQUIPMENT
…
状态n
};
2.枚举的内存:所有枚举变量都占4个字节,状态对应一个整数(编号默认从0开始).
如果直接给某一个状态赋值整数,下面的依次+1
3.枚举访问状态: 1.直接访问 UP
2.枚举名::状态名 Dir::UP
4.枚举状态与整数间的赋值;
enum Dir
{
UP,
DOWN = 5,
LEFT,
RIGHT
};
Dir dir = Dir::UP;
int x = dir;//枚举变量直接给整数赋值
dir = (Dir)(x + 1);//整数给枚举变量赋值时,需要强转
cout << sizeof(Dir) << endl;//4
//cout << sizeof(GameState) << endl;//未定义的变量类型
cout << UP << endl;//0
cout << RIGHT << endl;//7
cout << Dir::LEFT << endl//6;