C語言之結構體、共用體、列舉
#include <stdio.h>
struct student //結構體型別的說明與定義分開。 宣告
{
int age; /*年齡*/
float score; /*分數*/
char sex; /*性別*/
};
int main()
{
struct student a = { 20, 79, 'f' }; //定義
printf("年齡:%d 分數:%.2f 性別:%c\n", a.age, a.score, a.sex);
getchar();
return 0;
}
列印結果如圖:從上面的基本規律不難學習結構體的基本用法,與c++中的物件有些相似,主要的定義方式其實就是複製結構體名到main函式中,後跟一個類名(a)之後賦值結構體中每一項,要注意的是一一對應。共同體定義:在進行某些演算法的C語言程式設計的時候,需要使幾種不同型別的變數存放到同一段記憶體單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同佔用一段記憶體的結構,在C語言中,被稱作“共用體”型別結構,簡稱共用體。關鍵詞:
union 共用體名
{
成員表列
}變量表列;
示例如下:union data
{
int i;
char ch;
float f;
}a,b,c; [編輯本段]共用體變數的引用方式 只有先定義了共用體變數才能在後續程式中引用它,有一點需要注意:不能引用共用體變數,而只能引用共用體變數中的成員。
結構體和共用體的區別在於:結構體的各個成員會佔用不同的記憶體,互相之間沒有影響;而共用體的所有成員佔用同一段記憶體,修改一個成員會影響其餘所有成員。
結構體佔用的記憶體大於等於所有成員佔用的記憶體的總和(成員之間可能會存在縫隙),共用體佔用的記憶體等於最長的成員佔用的記憶體。共用體使用了記憶體覆蓋技術,同一時刻只能儲存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。
那麼共同體的簡單應用就到這。
列舉型別的定義形式為:
enum typeName{ valueName1, valueName2, valueName3, ...... };
enum
是一個新的關鍵字,專門用來定義列舉型別,這也是它在C語言中的唯一用途;typeName
是列舉型別的名字;valueName1,
valueName2, valueName3, ......
是每個值對應的名字的列表。注意最後的;
不能少。列舉的存在,其實就是為了簡化程式碼,能夠列出所有可能的取值,並給它們取一個名字。例如,列出一個星期有幾天: enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun }; 可以看到,我們僅僅給出了名字,卻沒有給出名字對應的值,這是因為列舉值預設從 0 開始,往後逐個加 1(遞增);也就是說,week 中的 Mon、Tues ...... Sun 對應的值分別為 0、1 ...... 6。 我們也可以給每個名字都指定一個值: enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 }; 更為簡單的方法是隻給第一個名字指定值: enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun }; 這樣列舉值就從 1 開始遞增,跟上面的寫法是等效的。 列舉是一種型別,通過它可以定義列舉變數: enum week a, b, c; 也可以在定義列舉型別的同時定義變數: enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c; 有了列舉變數,就可以把列表中的值賦給它: 純文字複製 enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun }; enum week a = Mon, b = Wed, c = Sat; 或者: enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;
需要注意的就是,列舉定義的量屬於全域性常量,在其他地方不能再有與之重名的量。
C語言允許為一個數據型別起一個新的別名,就像給人起“綽號”一樣。
起別名的目的不是為了提高程式執行效率,而是為了編碼方便。例如有一個結構體的名字是 stu,要想定義一個結構體變數就得這樣寫:
struct stu stu1;
struct 看起來就是多餘的,但不寫又會報錯。如果為 struct stu 起了一個別名 STU,書寫起來就簡單了:
STU stu1;
這種寫法更加簡練,意義也非常明確,不管是在標準標頭檔案中還是以後的程式設計實踐中,都會大量使用這種別名。
使用關鍵字 typedef 可以為型別起一個新的別名,語法格式為:
typedef oldName newName;
oldName 是型別原來的名字,newName 是型別新的名字。例如:
typedef int INTEGER;
INTEGER a, b;
a = 1;
b = 2;
INTEGER a, b;等效於int a, b;。
今天的學習的知識都非常的簡單,只要稍加理解都能靈活運用,同時,結構體可以巢狀的是可以肯定的。也是從今天開始,與遊戲慢慢接近,變玩邊學,下面是C對傳奇中 人物屬性介紹的結構體:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
struct attribute
{
int life; //生命值
int mana; //魔法值
int internal; //內功值
int PhysicalF; //物理防禦
int MagicF; //魔法防禦
int PhysicalG; //物理攻擊
int MagicG; //魔法攻擊
int power; //道術攻擊
int dodge; //閃避
int accurate; //準確度
int lucky; //幸運值
int curse; //詛咒值
float crit; //暴擊率
int damage; //暴擊力
};
struct role
{
char name[50]; //人物名
int Lv; //等級
char Vip; //是否Vip
char Buff; //是否有buff
char job[20]; //職業
struct attribute figure1; //屬性結構體
};
void main(){
char a[50] = "";
int n = 0;
struct role person1 = { "我是超人", 60, 'T', 'T', "戰士", { 15516, 2430, 205, 796, 419, 997, 50, 50, 8, 30, 0, 0, 0.00, 0 } };
printf("請輸入人物名:"); //printf("%d\n", person1.figure1.life);
gets(a);
/*if (strcmp(a[50], person1.name[50]) != 0){
printf("您輸入的ID有誤\n");
system("pause");
return;
}*/
printf("登陸成功!\n%s\n是否Vip:%c\n是否有buff:%c\n職業:%s\n", person1.name, person1.Lv, person1.Vip, person1.job);
printf("請輸入你要檢視的序號:\n1、人物屬性 2、揹包\n");
scanf("%d",&n);
if (n == 1){
printf("生命值:%d\n", person1.figure1.life);
printf("魔法值:%d\n", person1.figure1.mana);
printf("內功值:%d\n", person1.figure1.internal);
printf("物理防禦:%d\n", person1.figure1.PhysicalF);
printf("魔法防禦:%d\n", person1.figure1.MagicF);
printf("物理攻擊:%d\n", person1.figure1.PhysicalG);
printf("魔法攻擊:%d\n", person1.figure1.MagicG);
printf("道術攻擊:%d\n", person1.figure1.power);
printf("閃避:%d\n", person1.figure1.dodge);
printf("準確度:%d\n", person1.figure1.accurate);
printf("幸運值:%d\n", person1.figure1.lucky);
printf("詛咒值:%d\n", person1.figure1.curse);
printf("暴擊率:%f\n", person1.figure1.crit);
printf("暴擊力:%d\n", person1.figure1.damage);
}
system("pause");
return;
}
上面用到的巢狀可以加以分析~~
相關推薦
11、C語言之結構體和共用體
結構體數組 結構體 float add font sco 規則 student mon 一、結構體 結構體:是一種自定義的構造數據類型 用途:把不同類型的數據組合成一個整體。 結構體類型定義: struct [結構體名] { 類型識
1-C語言之結構體、共用體、列舉
一、關鍵字說明 C語言有32個關鍵字,C語言通過關鍵字的使用使編譯器進行相關的操作 結構體對應關鍵字struct 共用體(聯合體)對應的關鍵字是union 列舉型別對應的關鍵字是enum 二、結構
C語言之結構體、共用體、列舉
結構體的基本格式如下:#include <stdio.h> struct student //結構體型別的說明與定義分開。 宣告 { int age; /*年齡*/ float score; /*分數*/ char sex; /*性別*/ }; int main() {
C語言之結構體 共用體 列舉 typedef
結構體型別和結構體變數, struct 定義結構體型別時 不佔記憶體 匿名結構體,無法建立變數訪問,有限的結構體型別變數 結構體變數不能整體引用,只能引用變數成員 結構體變數用大括號賦值,只有在建立並初始化的時候才可以 #define _CRT_SECURE_NO_WARN
C 語言之結構體
ons nbsp span clas %d str style ret [] 1 #include <stdio.h> 2 3 #include <struct.h> 4 5 #include <string.h>
C語言之結構體巢狀一級指標和二級指標
指標是C語言的精華,也是c中最難的部分;為了鍛鍊和提高自己對指標的理解,特在結構體中巢狀一級指標和二級指標來加深對。 #include<stdio.h> #include <string.h> #include<stdlib.h&
C語言查缺補漏(九)共用體與列舉型別
忽略點九:共用體與列舉型別 共用體?What?它是什麼,上了兩年大學的我有點懵逼。共用體已然成了我C語言的盲區。 存在必然有它的意義,所以惡補了一下有關共用體的知識。 在我的理解裡,共用體和上一篇博文所介紹的結構體,都是用來儲存不同資料型別的“容器”
c語言之結構
c語言 成員 strong 定義 clas style class str blog 定義結構: struct point { int x; int y; }; 定義結構並聲明變量: struct point { int x; int
C語言之結構和其他資料形式
1.結構變數 C語言中,提供了**結構變數(structure variable)**用於提高我們表示資料的能力,如果我們要列印一本書的圖書目錄,其中包含書名作者等等資訊,這樣我們需要這種資料形式既能包含字串,又能包含數字,而且各資訊獨立,此時我們就可以使用結構變數來儲存資料。 1.
C語言(三 字串、結構體、共用體、輸入輸出)
字串 字串是儲存了一些字元,最後以null(’/0’)結尾的一維字元陣列。 char str[6] = {'h','e','l','l','o','/0'}; char str[ ] = "hello" ; 還有一些字串操作函式: 1、strcpy(s1,s2) 複製s2到s1 2
C語言之struct大小、首地址與記憶體對齊—由結構體成員地址得到結構體首地址
被問到如下問題:給定一個結構體中某個變數地址,可否得到結構體變數的地址? 答案是可以,但是對不同的場合有不同的結果;這與微處理器平臺、編譯器的處理不可分割。 首先,對於處理器,大尾端、小尾端的因素必須考慮; 其次: 一、 ANSIC標準中並沒有規定,相鄰宣告的變數在記憶體中一定要相鄰。 為了程式的高效性,
C語言之_指標陣列、結構體、動態記憶體分配
1、sizeof() int main() { int a[20]; int count=sizeof(a)/sizeof(int); printf(“%d\n”,count); return 0; } 2、指標陣列
C語言高階篇 - 6.陣列&字串&結構體&共用體&列舉
1.程式中記憶體從哪裡來1 1.1、程式執行需要記憶體支援 ()對程式來說,記憶體就是程式的立足之地(程式是被放在記憶體中執行的);程式執行時需要記憶體來儲存一些臨時變數。 1.2、記憶體管理最終是由作業系統完成的 (1)記憶體本身在物理上是一個硬體器件,由硬體系統提供。 (2)
C++列舉、結構、共用體
一、列舉 enum typename {識別符號[=整型常數],...}; 作用:自定義值域;增加程式碼可讀性 從語法角度看,列舉元素是命名常量,列舉元素沒有賦初值的話實際值為0,1...沒有指定值的列舉元素,其值為前一元素加 1 從應用角度看,可以將列舉元素看作字面常量
C語言(結構體、列舉型別、型別定義)
結構體的定義 1、`struct 結構體名 { 成員型別 成員名; … }; 2、省略結構體名 struct { 成員型別 成員名; ... }結構體變數名; 成員可以是其他已定義結構體的型別,但不能是自己結構體的型別,可以是自己結構體的指標。 定義
C++ primer plus書之--C++函式和C語言字串, 結構體, string
函式和C風格字串 要將C風格字串作為引數傳遞給函式, 表示字串的方式有三種: 1.char陣列 2.用""擴起來的字串常量 3.被設定為字串地址的char指標 來看一個例子: // c風格字串例子 #include "iostream" using namespace std
C程式設計 | 結構體、共用體和連結串列
一、定義和使用結構體變數 1、自己建立結構體型別 C語言允許使用者自己建立由不同型別資料組成的組合型的資料結構,它稱為結構體(structre)。 例如在程式中要用的如下圖所示的資料結構,可以在程式中自己建立一個結構體型別: struct Student
C結構體、共用體、列舉
一、結構體三種定義方式 1、先宣告結構體型別,再定義變數名 struct student { int num; char name[20]; char sex; int age; char addr[30]; } struct student student1
C 語言中的結構體和共用體(聯合體)
本文主要總結了譚浩強主編的《C 程式設計》教材中結構體和共用體相關章節的內容。 在 C 語言中, 結構體(struct) 是一個或多個變數的集合,這些變數可能為不同的型別,為了處理的方便而將這些變數組織在一個名字之下。由於結構體將一組相關變數看作一個單元而不是各自獨立的實體,因此結構體有助於組織複雜的資料,
【C語言】結構體、聯合,記憶體對齊規則總結
一、結構體 1.1什麼是結構體 在C語言中,結構體是一種資料結構,是C提供的聚合型別(C提供了兩種聚合型別:陣列和結構)的一種。結構體與陣列的區別是:陣列是相同型別的集合,而結構體可能具有不同的型別。 結構體也可以被宣告為變數,陣列或者指標等,用以實現較複雜的