【c++】结构体/联合/枚举

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值