C/C++ 陣列只能儲存相同型別資料,而 結構體 是使用者自訂的資料型別,允許儲存不同型別的資料項,常用來表示一筆記錄(如書籍資訊:書名、作者、主題、ID)。
使用 struct 關鍵字,格式如下:
struct [structure_tag] {
member_definition;
...
} [structure_variables];
structure_tag 為可選標籤,成員定義為標準變數宣告。範例定義 Books 結構:
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} book; // 可選:直接宣告變數
使用 成員存取運算子 (.):
struct Books Book1, Book2;
strcpy(Book1.title, "Learn C++ Programming");
Book1.book_id = 6495407;
cout << Book1.title << endl;
#include <iostream>
#include <cstring>
using namespace std;
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1, Book2;
// Book1 資料
strcpy(Book1.title, "Learn C++ Programming");
strcpy(Book1.author, "Chand Miyan");
strcpy(Book1.subject, "C++ Programming");
Book1.book_id = 6495407;
// Book2 資料
strcpy(Book2.title, "Telecom Billing");
strcpy(Book2.author, "Yakit Singha");
strcpy(Book2.subject, "Telecom");
Book2.book_id = 6495700;
// 輸出
cout << "Book 1 title : " << Book1.title << endl;
cout << "Book 1 author : " << Book1.author << endl;
// ... 其餘欄位略
return 0;
}
傳遞方式與一般變數相同,可傳值或傳址。傳值範例:
void printBook(struct Books book) {
cout << "Book title : " << book.title << endl;
// ...
}
int main() {
printBook(Book1); // 傳值:複製整個結構體
}
宣告指標、取址、透過 箭頭運算子 (->) 存取成員:
struct Books *ptr = &Book1;
cout << ptr->title; // 等同於 (*ptr).title
修改 printBook 接受指標參數可避免複製大型結構體:
void printBook(struct Books *book) {
cout << book->title << endl;
}
printBook(&Book1); // 傳遞位址
為結構體建立別名,省去 struct 關鍵字:
typedef struct {
char title[50];
char author[50];
char subject[100];
int book_id;
} Books;
Books Book1, Book2; // 直接使用 Books 型別
typedef 亦可用於非結構型別,如 typedef long int *pint32; 定義長整數指標型別。
.,指標存取用 ->。typedef 提升程式碼可讀性與可維護性。