C 語言中的結構體:初學者指南

Hello, 有志於成為程序員的各位!今天,我們將要一起探索 C 語言中結構體的迷人世界。別擔心如果你之前從未寫過一行代碼——我會一步步引導你走過這個旅程,就像我過去幾年來為無數學生所做的那樣。那麼,讓我們一起踏上這次冒險吧!

C - Structures

C 語言中的結構體是什麼?

想像你正在建立一个數字化的通訊錄。對於每個人,你可能想要儲存他們的名字、電話號碼和電子郵件地址。在 C 語言中,結構體讓你可以將這些相關的信息組合在一起,並在單一的名稱下進行管理。這就像創造了一個自定義的數據類型,可以存放多種不同類型的數據。

這裡有一個簡單的比喻:把結構體想像成一個背包。就像背包可以裝不同的物品,如書籍、筆和水瓶一樣,結構體可以存放不同類型的數據。

宣告(創建)一個結構體

讓我們從創建我們的第一個結構體開始。我們將使用 struct 關鍵字來完成這項操作。

struct Person {
char name[50];
int age;
float height;
};

在這個例子中,我們創建了一個名為 Person 的結構體。它可以存放一個名稱(最多50個字符)、一個年齡(整數)和一個身高(浮點數)。

結構體變量的宣告

現在,既然我們已經定義了結構體,讓我們創建一個這種類型的變量。

struct Person john;

這行代碼創建了一個名為 john 的變量,類型為 struct Person。這就像說,“嘿,C 語言,給我一個叫做 'john' 的背包,它能夠存放名稱、年齡和身高。”

結構體的初始化

讓我們在結構體中放入一些數據:

struct Person john = {"John Doe", 30, 5.9};

在這裡,我們正在為我們的 john 背包填入一個名稱("John Doe")、一個年齡(30)和一個身高(5.9)。

存取結構體成員

要存取或修改結構體中的數據,我們使用點(.)操作符:

printf("Name: %s\n", john.name);
printf("Age: %d\n", john.age);
printf("Height: %.1f\n", john.height);

john.age = 31;  // 祝 John 生日快樂!

這段代碼打印出 John 的詳細信息,然後更新他的年齡。這就像伸手進我們背包的特定口袋。

複製結構體

在 C 語言中,你可以將一個結構體複製到另一個相同類型的結構體:

struct Person jane = john;

這樣創建了一個新的 Person 名為 jane,並且與 john 有相同的數據。這就像為 Jane 做了一個與 John 完全相同的背包複制品。

結構體作為函數參數

你可以將結構體作為參數傳遞給函數,就像其他數據類型一樣:

void printPerson(struct Person p) {
printf("Name: %s, Age: %d, Height: %.1f\n", p.name, p.age, p.height);
}

// 使用方法
printPerson(john);

這個函數接受一個 Person 結構體並打印其內容。這就像把你的背包遞給別人,讓他告訴你裡面有什麼。

指向結構體的指針

有時,使用指向結構體的指針會更有效率,特別是當處理大型結構體時:

struct Person *pJohn = &john;
printf("Name: %s\n", (*pJohn).name);
// 或者,更常見的是:
printf("Age: %d\n", pJohn->age);

箭頭操作符(->)是一種簡寫,用於解引用指針並訪問成員。這就像有一張地圖指向你的背包在哪裡,而不是自己攜帶背包。

位域

位域允許你為結構體成員指定使用的位數:

struct PackedData {
unsigned int flag : 1;
unsigned int data : 31;
};

這個結構體只使用 32 個位元的內存:1 個位元給 flag 和 31 個位元給 data。這就像在你的背包中為非常小的物品留出一個專門的小隔間。

方法表

這裡是一個我們所涵蓋方法的快速參考表:

方法 描述 示例
結構體宣告 定義一個新的結構體 struct Person { ... };
變量宣告 創建一個結構體類型的變量 struct Person john;
初始化 為結構體設置初始值 struct Person john = {"John", 30, 5.9};
成員存取 存取或修改結構體成員 john.age = 31;
結構體複製 將一個結構體複製到另一個 struct Person jane = john;
函數參數 將結構體作為參數傳遞 void printPerson(struct Person p) { ... }
指向結構體的指針 使用指針高效地處理 struct Person *pJohn = &john;
位域 為成員指定位大小 struct PackedData { unsigned int flag : 1; };

這就是 C 語言中結構體的基本知識!記住,就像學會有效地組織你的背包一樣,掌握結構體需要練習。如果它們立即沒有引起你的共鳴——不要氣餒,持續編程,持續嘗試,很快你就能像專家一樣組織你的數據了!

祝編程愉快,未來的 C 語言巫師們!

Credits: Image by storyset