一.關鍵字
static: 修飾全域性靜態變數:作用範圍侷限於它的原始檔,即只有本檔案內的**才可以訪問它,變數名在其他檔案內不可見。
修飾區域性靜態變數:侷限於特定函式,但出作用域並不釋放,在函式體內的靜態變數的值也能夠維持。
修飾靜態函式:作用範圍僅限於它的原始檔,即只有本檔案內才能夠呼叫,函式名在其他檔案不可見。
存放位置:程式開始時,存放在全域性資料區,結束時釋放空間,預設初始化值是0,使用時可改變其值。
extern: 可以置於變數或函式前,以表明變數或函式的定義在別的檔案中,下面**用到的這些變數或函式是外來的,不是本檔案定義的,提示鏈結器遇到此變數和函式 時在其他模組中解析/繫結此識別符號。
enum: 列舉型別的定義形式為:
enum typename;
enum是乙個新的關鍵字,專門用來定義列舉型別,這也是它在c語言中的唯一用途;typename是列舉型別的名字;valuename1, valuename2, valuename3, ......是每個 值對應的名字的列表。注意最後的;不能少。
需要注意的兩點是:
( 1 ) 列舉列表中的 mon、tues、wed 這些識別符號的作用範圍是全域性的,不能再定義與它們名字相同的變數。
( 2 ) mon、tues、wed 等都是常量,不能對它們賦值,只能將它們的值賦給其他的變數。
列舉和巨集其實非常類似:巨集在預處理階段將名字替換成對應的值,列舉在編譯階段將名字替換成對應的值。我們可以將列舉理解為編譯階段的巨集。
二.結構體
1.在c語言中,可以使用結構體(struct)來存放一組不同型別的資料。結構體的定義形式為:
struct 結構體名;
2.結構體是一種集合,它裡面包含了多個變數或陣列,它們的型別可以相同,也可以不同,每個這樣的變數或陣列都稱為結構體的成員(member)。請看下面的乙個例子:
struct stu;
stu 為結構體名,它包含了 5 個成員,分別是 name、num、age、group、score。結構體成員的定義方式與變數和陣列的定義方式相同,只是不能初始化。注意大括號後面的分號;不能少,這是一條完整的語句。
3.結構體變數
既然結構體是一種資料型別,那麼就可以用它來定義變數。例如:
struct stu stu1, stu2;
定義了兩個變數 stu1 和 stu2,它們都是 stu 型別,都由 5 個成員組成。注意關鍵字struct不能少。
4.結構體成員的獲取和賦值
結構體和陣列類似,也是一組資料的集合,整體使用沒有太大的意義。陣列使用下標[ ]獲取單個元素,結構體使用點號 . 獲取單個成員。獲取結構體成員的一般格式為:
結構體變數名.成員名;
如:給上述結構體成員賦值
stu1.name = "tom";
stu1.num = 12;
stu1.age = 18;
stu1.group = 'a';
stu1.score = 136.5;
5. 結構體陣列
所謂結構體陣列,是指數組中的每個元素都是乙個結構體。在實際應用中,結構體陣列常被用來表示乙個擁有相同資料結構的群體。
定義結構體陣列和定義結構體變數的方式類似,請看下面的例子:
struct stuclass[5];
表示乙個班級有5個學生。
結構體陣列在定義的同時也可以初始化。
6.結構體和指標
指標也可以指向乙個結構體,定義的形式一般為:
struct 結構體名 *變數名;
下面是乙個定義結構體指標的例項:
struct stu stu1 = ;
//結構體指標
struct stu *pstu = &stu1;
注意:結構體變數名和陣列名不同,陣列名在表示式中會被轉換為陣列指標,而結構體變數名不會,無論在任何表示式中它表示的都是整個集合本身,要想取得結構體變數 的位址,必須在前面加&,所以給 pstu 賦值只能寫作:
struct stu *pstu = &stu1;
而不能寫作:
struct stu *pstu = stu1;
7.通過指標獲取結構體成員
通過結構體指標可以獲取結構體成員,一般形式為:
(*pointer).membername
或者:pointer->membername
第一種寫法中,. 的優先順序高於*,(*pointer)兩邊的括號不能少。如果去掉括號寫作*pointer.membername,那麼就等效於*(pointer.numbername),這樣意義就完全不了。
第二種寫法中,->是乙個新的運算子,習慣稱它為「箭頭」,有了它,可以通過結構體指標直接取得結構體成員;這也是->在c語言中的唯一用途。
結構體 struct關鍵字
多個資料組合在一起便是結構體,此時需要用到我們的關鍵字 struct 格式為 struct 需要定義的東西 如此時我們需要定義乙個學生的資訊 struct student 此時student這個資訊結構體我們就已經定義好了,如果定義的結構體中有多個資料,可以考慮定義巨集變數,便於修改維護 接著進行初...
typedef關鍵字與結構體,結構體指標
請移步原文 一 使用typedef定義結構體 typedef用來定義新的資料型別,通常typedef與結構體的定義配合使用。使用typedef的目的使結構體的表達更加簡練 所以說typedef語句並不是必須使用的 定義乙個名字為treenode的結構體型別 現在並沒有定義結構體變數,並不占用記憶體空...
typedef關鍵字與結構體 結構體指標的定義
typedef用來定義新的資料型別,通常typedef與結構體的定義配合使用。使用typedef的目的使結構體的表達更加簡練 所以說typedef語句並不是必須使用的 定義乙個名字為treenode的結構體型別 現在並沒有定義結構體變數,並不占用記憶體空間 struct treenode 為結構體起...