這個項目基本以看源碼爲主,主要是給自己的c語言結個尾,之後有兩個github的項目重點去練習,因爲不是自己沒寫,就不放源碼了,需要的可以私信或者評論,我私發.
項目來源:老九君
項目名稱:精忠報國之笑傲江湖
視頻課地址:網易雲課堂
基本功能/架構:
第一天
看了一下這個遊戲的主要結構和函數定義
目錄:
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