struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
type_name
是結構型別的名稱,object_name
可以是一組該結構型別的物件的有效識別符號。在花括號 {}
內,是資料成員的列表,每個成員都用一個型別和一個有效的識別符號作為其名稱來指定。
|
|
product
的結構型別,並定義它有兩個成員:weight
和 price
,每個成員都有不同的基本型別。這個宣告建立了一個新的型別(product
),然後用它來宣告該型別的三個物件(變數):apple
、banana
和 melon
。請注意,一旦 product
被宣告,它的使用方式就和任何其他型別一樣。struct
定義的末尾,分號(;
)之前,可以使用可選欄位 object_names
來直接宣告該結構型別的物件。例如,結構物件 apple
、banana
和 melon
可以在定義資料結構型別時就進行宣告:
|
|
object_names
,型別名稱(product
)就變成了可選的:struct
語句要麼需要一個 type_name
,要麼在 object_names
中至少有一個名稱,但不一定兩者都需要。product
)和該型別的物件(apple
、banana
和 melon
)。從一個結構型別(product
)可以宣告出許多物件(例如 apple
、banana
和 melon
)。apple
、banana
和 melon
),就可以直接訪問它們的成員。語法很簡單,在物件名和成員名之間插入一個點(.
)。例如,我們可以像操作它們各自型別的標準變數一樣來操作這些元素:
|
|
apple.weight
、banana.weight
和 melon.weight
的型別是 int
,而 apple.price
、banana.price
和 melon.price
的型別是 double
。
|
|
Enter title: Alien Enter year: 1979 My favorite movie is: 2001 A Space Odyssey (1968) And yours is: Alien (1979) |
yours.year
是一個 int
型別的有效變數,而 mine.title
是一個 string
型別的有效變數。mine
和 yours
本身也是有型別的變數(movies_t
型別)。例如,它們都被傳遞給了 printmovie
函式,就像它們是簡單變數一樣。因此,資料結構的一個特性就是能夠既可以單獨引用其成員,也可以引用整個結構。在這兩種情況下,都使用相同的識別符號:結構體的名稱。
|
|
Enter title: Blade Runner Enter year: 1982 Enter title: The Matrix Enter year: 1999 Enter title: Taxi Driver Enter year: 1976 You have entered these movies: Blade Runner (1982) The Matrix (1999) Taxi Driver (1976) |
|
|
amovie
是一個 movies_t
結構型別的物件,而 pmovie
是一個指向 movies_t
結構型別物件的指標。因此,下面的程式碼也是有效的:
|
|
pmovie
的值將被賦為物件 amovie
的地址。->
)。
|
|
Enter title: Invasion of the body snatchers Enter year: 1978 You have entered: Invasion of the body snatchers (1978) |
->
)是一個解引用運算子,專門用於指向含有成員的物件的指標。這個運算子用於直接從物件的地址訪問其成員。例如,在上面的例子中:
|
|
|
|
pmovie->title
和 (*pmovie).title
這兩個表示式都是有效的,都訪問了由名為 pmovie
的指標所指向的資料結構的成員 title
。這與下面的表示式完全不同:
|
|
|
|
pmovie
中一個假設存在的名為 title
的指標成員所指向的值(但實際情況並非如此,因為 title
不是指標型別)。下表總結了指標運算子和結構成員運算子的可能組合:表示式 | 求值內容 | 等價於 |
---|---|---|
a.b | 物件 a 的成員 b | |
a->b | 由 a 指向的物件的成員 b | (*a).b |
*a.b | 物件 a 的成員 b 所指向的值 | *(a.b) |
|
|
|
|
![]() 動態記憶體 | ![]() 目錄 | ![]() 其他資料型別 |