C語言中的結構體(Structures)是一種自定義的數據類型,允許你將不同類型的數據項組合成一個單一的數據類型。結構體是復合數據類型的一種,它使得相關的數據能夠以一個單元存儲和處理。
定義結構體
結構體的定義使用關鍵字 struct,後跟結構體的名稱和一對花括號,花括號內是結構體的成員列表。每個成員都有其數據類型和名稱。
// 定義一個名為Person的結構體
struct Person {
char name[50];
int age;
float height;
};
聲明結構體變量
定義結構體後,你可以聲明該類型的變量。結構體變量可以在定義時初始化,也可以在之後賦值。
// 聲明一個Person類型的變量
struct Person person1;
// 聲明並初始化結構體變量
struct Person person2 = {"Alice", 30, 5.5};
訪問結構體成員
你可以使用點運算符(.)來訪問結構體的成員。
// 賦值結構體成員
person1.age = 25;
strcpy(person1.name, "Bob"); // 使用strcpy來復制字符串
person1.height = 6.0;
// 訪問結構體成員
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.2f\n", person1.height);
![](https://news.xinpengboligang.com/upload/keji/b84e62a6734af596ede40c622570e1c3.jpeg)
結構體指針
你還可以創建指向結構體的指針,這樣可以通過指針訪問結構體的成員。使用箭頭運算符(->)來訪問結構體指針所指向的成員。
// 創建結構體指針
struct Person *ptr = &person1;
// 通過指針訪問結構體成員
ptr->age = 26;
strcpy(ptr->name, "Charlie");
ptr->height = 5.8;
// 通過指針打印結構體成員
printf("Name: %s\n", ptr->name);
printf("Age: %d\n", ptr->age);
printf("Height: %.2f\n", ptr->height);
![](https://news.xinpengboligang.com/upload/keji/aeb15df873b4f5d5c511103660293835.jpeg)
![](https://news.xinpengboligang.com/upload/keji/f51d715d888c3e0b2da8c38b863e9630.jpeg)
結構體作為函數參數
結構體可以作為函數的參數傳遞,可以傳遞結構體本身或者結構體的指針。
// 函數聲明,傳遞結構體本身
void printPerson(struct Person p) {
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
printf("Height: %.2f\n", p.height);
}
// 函數聲明,傳遞結構體指針
void modifyPerson(struct Person *p) {
p->age = 1; // 增加年齡
}
// 調用函數
printPerson(person1);
modifyPerson(&person1);
printPerson(person1); // 註意年齡增加了
![](https://news.xinpengboligang.com/upload/keji/96e8e813f8a23cb6819b465c7221322a.jpeg)
結構體數組
結構體也可以定義成數組形式,用於存儲多個結構體變量。
// 定義一個結構體數組
struct Person people[3];
// 初始化結構體數組
people[0] = (struct Person){"Dave", 28, 5.9};
people[1] = (struct Person){"Eve", 34, 5.6};
people[2] = (struct Person){"Frank", 40, 5.7};
// 遍歷結構體數組
for (int i = 0; i < 3; i ) {
printPerson(people[i]);
}
結構體嵌套
結構體可以嵌套其他結構體作為其成員。
// 定義一個地址結構體
struct Address {
char street[100];
char city[50];
int zipCode;
};
// 修改Person結構體,加入Address作為成員
struct Person {
char name[50];
int age;
float height;
struct Address address; // 嵌套結構體作為成員
};
// 使用嵌套結構體
struct Person person3 = {
"Grace", 27, 5.4,
{"123 Main St", "Metropolis", 12345}
};
printf("Name: %s\n", person3.name);
printf("Street: %s\n", person3.address.street);
通過這些例子,你可以看到如何在C語言中定義、聲明、初始化、訪問和操作結構體。結構體是C語言中處理相關數據的非常有用的工具,能夠幫助你構建更加復雜和組織化的數據結構。