C 結構體
阿新 • • 發佈:2020-08-21
C 陣列允許定義可儲存相同型別資料項的變數,結構是 C 程式設計中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。
結構用於表示一條記錄,假設您想要跟蹤圖書館中書本的動態,您可能需要跟蹤每本書的下列屬性:
- Title
- Author
- Subject
- Book ID
定義結構
為了定義結構,您必須使用struct語句。struct 語句定義了一個包含多個成員的新的資料型別,struct 語句的格式如下:
struct tag { member-list member-list member-list ... } variable-list ;tag是結構體標籤。
member-list
variable-list結構變數,定義在結構的末尾,最後一個分號之前,您可以指定一個或多個結構變數。下面是宣告 Book 結構的方式:
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;在一般情況下,tag、member-list、variable-list這 3 部分至少要出現 2 個。以下為例項:
//此宣告聲明瞭擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c //同時又聲明瞭結構體變數s1 //這個結構體並沒有標明其標籤 struct { int a; char b; double c; } s1; //此宣告聲明瞭擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c //結構體的標籤被命名為SIMPLE,沒有宣告變數 struct SIMPLE { int a; char b; double c; }; //用SIMPLE標籤的結構體,另外聲明瞭變數t1、t2、t3 struct SIMPLE t1, t2[20], *t3; //也可以用typedef建立新型別 typedef struct { int a; char b; double c; } Simple2; //現在可以用Simple2作為型別宣告新的結構體變數 Simple2 u1, u2[20], *u3;在上面的宣告中,第一個和第二宣告被編譯器當作兩個完全不同的型別,即使他們的成員列表是一樣的,如果令 t3=&s1,則是非法的。
結構體的成員可以包含其他結構體,也可以包含指向自己結構體型別的指標,而通常這種指標的應用是為了實現一些更高階的資料結構如連結串列和樹等。
//此結構體的宣告包含了其他的結構體 struct COMPLEX { char string[100]; struct SIMPLE a; }; //此結構體的宣告包含了指向自己型別的指標 struct NODE { char string[100]; struct NODE *next_node; };如果兩個結構體互相包含,則需要對其中一個結構體進行不完整宣告,如下所示:
結構體變數的初始化
和其它型別變數一樣,對結構體變數可以在定義時指定初始值。
例項
#include <stdio.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book = {"C 語言", "RUNOOB", "程式語言", 123456}; int main() { printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id); }執行輸出結果為:
title : C 語言
author: RUNOOB
subject: 程式語言
book_id: 123456
訪問結構成員
為了訪問結構的成員,我們使用成員訪問運算子(.)。成員訪問運算子是結構變數名稱和我們要訪問的結構成員之間的一個句號。您可以使用struct關鍵字來定義結構型別的變數。下面的例項演示了結構的用法: