結構體,關鍵字

2021-08-10 21:36:39 字數 2375 閱讀 9710

一.關鍵字

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 為結構體起...