C语言项目-精忠报国-第一天-union关键字总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-inehfiQc-1584246523757)(:/c0a992273939428ea0848d86e15b6ecf)]

这个项目基本以看源码为主,主要是给自己的c语言结个尾,之后有两个github的项目重点去练习,因为不是自己没写,就不放源码了,需要的可以私信或者评论,我私发.

项目来源:老九君

项目名称:精忠报国之笑傲江湖

视频课地址:网易云课堂

基本功能/架构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存6546854)(:/c0a992273939428ea0848d8,源站可能有防盗链机制,建议将图片保存下来直接上传失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XyqA8td9-1584246546856)(:/051047e905ff4bd5b8a36b7df246546857)(:/e504be615a334d4684555326bb5608)(unio/051047e905ff4bd5b8a36b7df7d65230)]


第一天

看了一下这个游戏的主要结构和函数定义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Te3Xb73-1584246523762)(:/e504be615a334d4684555326bb553a18)]

目录:
1.union关键字


1.union关键字

代码如下

/* 游戏道具 */
typedef struct _prop{
    int id;
    char name[50];
    int level;
    PropType type;
    int stock;          //当前道具的数量
    union{
        int attack;     //如果是武器,就对应攻击力
        int defense;    //如果是防具,就对应防御力
        int power;      //如果是血瓶等消耗品,对应增加的能量值
    };

    double price;
    char desc[200];     //游戏道具描述
  • 简单来说,union是一种特殊的数据类型,主要作用是在相同的内存位置存放"多个"数据"成员中的"一个".
  • 但任何时候只能有一个成员带值(因为使用的是相同的内存位置),否则会进行覆盖(下面讲访问时会有实例),覆盖时从union首地址开始
  • 定义方式与struct类似,标签和变量均为可选
	union tag
	{
	   member definition;
	   member definition;
	   ...
	   member definition;
	} variables;
  • union占用的内存大小由最大的成员大小决定,如下union将占用20个字节的内存空间
	union Data
	{
	   int i;
	   float f;
	   char  str[20];
	} data;
  • 使用成员访问运算符(.)来访问union成员,data是上面定义,输出结果中由于int和float都被str覆盖了,所以只有str正常输出
   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");
 
   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);
   
   //输出结果
   data.i : 1917853763
   data.f : 4122360580327794860452759994368.000000
   data.str : C Programming
参考:
发布了17 篇原创文章 · 获赞 7 · 访问量 2643

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/104876594
今日推荐