15.C語言:結構體的定義和使用

2024年2月6日 25点热度 0人点赞

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);

結構體指針

你還可以創建指向結構體的指針,這樣可以通過指針訪問結構體的成員。使用箭頭運算符(->)來訪問結構體指針所指向的成員。

// 創建結構體指針
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);

結構體作為函數參數

結構體可以作為函數的參數傳遞,可以傳遞結構體本身或者結構體的指針。

// 函數聲明,傳遞結構體本身
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); // 註意年齡增加了

結構體數組

結構體也可以定義成數組形式,用於存儲多個結構體變量。

// 定義一個結構體數組
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語言中處理相關數據的非常有用的工具,能夠幫助你構建更加復雜和組織化的數據結構。