C 語言中的對映或結構體

Ammar Ali 2022年7月18日
C 語言中的對映或結構體

本教程將討論使用對映或結構體在 C 語言中建立變數集合。

C 語言中的對映或結構體

結構體是不同或相同資料型別的變數的集合。例如,如果我們想為一個人建立一個檔案來儲存這個人的年齡、姓名和身高,我們可以使用結構體將所有資訊儲存在一個地圖或結構體下。

我們可以使用 struct 關鍵字在 C 語言中建立結構體。下面給出了結構體的基本語法。

struct NameOfStructure{
    dataType_1 member_1;
    dataType_2 member_2;
    ....
};

例如,讓我們建立一個結構體來儲存一個人的資訊。請參閱下面的程式碼。

struct Person {
  char *name;
  int age;
  float height;
};

結構體是我們可以用來建立包含結構體內定義的所有變數的物件的類。我們必須編寫 struct 關鍵字,然後是結構體的名稱和物件的名稱,以建立結構體的物件。

我們可以使用物件名稱和帶有點的變數名稱訪問任何結構體成員。我們可以使用賦值運算子獲取變數的值或更改它們的值。

例如,讓我們建立上述結構體的兩個物件,在其中儲存一些值,然後使用 printf() 函式列印它。請參閱下面的程式碼。

#include <stdio.h>

struct Person {
  char *name;
  int age;
  float height;
};

int main()
{
    struct Person person1, person2;
    person1.name = "Max";
    person1.age = 20;
    person1.height = 6.2;
    printf("Person 1 name = %s\n",person1.name);
    printf("Person 2 name = %s",person2.name);
}

輸出:

Person 1 name = Max
Person 2 name =

在上面的程式碼中,我們列印了兩個 person 物件的名稱。我們可以在輸出中看到顯示了第一個人的名字,但是沒有列印第二個人的名字,因為我們沒有為第二個人儲存任何名字。

兩個結構體物件的變數值可以相同也可以不同,但​​相互獨立。我們還可以像上面的程式碼一樣獲取或更改其他變數的值。

我們還可以在稱為巢狀結構體的其他結構體中建立結構體。我們必須建立一個我們想要附加到另一個結構體的結構體的物件,然後使用物件名稱來訪問它的變數。

例如,讓我們建立另一個結構體並將其與上述結構體連結。請參閱下面的程式碼。

#include <stdio.h>

struct job{
    char *name;
    int duration;
};
struct Person {
  struct job j;
  char *name;
  int age;
  float height;
};
int main()
{
    struct Person person1, person2;
    person1.j.name = "Engineer";
    person1.name = "Max";
    person1.age = 20;
    person1.height = 6.2;
    printf("Person 1 job name = %s\n",person1.j.name);
    printf("Person 1 name = %s",person1.name);
}

輸出:

Person 1 job name = Engineer
Person 1 name = Max

在上面的程式碼中,我們建立了另一個結構體來儲存一個人的工作資訊並訪問它的變數,我們首先必須訪問父結構體,在這種情況下是 Person,然後我們可以訪問變數的結構體工作

我們已經建立並連結了兩個結構體,但是我們可以建立任意數量的結構體並將它們相互連結。

在大量巢狀結構體的情況下,我們必須確保使用正確的對映來獲取變數的資訊。當我們想要儲存有關許多事物的資訊(例如有關人員及其工作的資訊)時,結構體很有用。

Author: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook