首頁 > 軟體

詳解C語言中結構體的使用

2022-07-01 18:03:18

結構體的宣告

結構體的定義:結構體是一些值的集合,這些值稱為成員變數,結構體的每個成員可以是不同型別的變數。

舉例:

//定義結構體型別
struct tag//struct結構體關鍵字 tag結構體標籤 struct tag結構體型別
{
    //成員變數
    char name[20];
    short age;
    char telphone[12];
    char sex[5];
}s1,s2,s3;//s1,s2,s3是三個全域性結構體變數
int main()
{
    struct tag s;//s是區域性變數
    return 0;
}

小tips:結構體型別是不佔記憶體空間的,-相當於int在C語言中也是不佔記憶體的,而int a(定義a變數後就會佔據記憶體)

使用typedef定義一個單獨的變數,因為我們在編寫程式碼的過程中,重複的書寫struct會感覺很繁瑣,這樣定義之後就可以直接使用改變數作為結構體型別。

舉例:

typedef struct tag//定義tag為結構體別名,tag等價於struct tag
{
    char name[20];
    short age;
    char telphone[12];
    char sex[5];
}tag;//tag指的是型別,而不是變數
int main()
{
    struct tag s1;
    tag s2;//struct tag==tag,因此tag可以直接使用
    return 0;
}

結構體成員的型別

結構體成員的型別可以是標量,陣列,指標。其他結構體。

結構體變數的定義和初始化:

#include <stdio.h>
typedef struct tag
{
    //結構體成員型別的定義
    char name[20];
    short age;
    char telphone[12];
    char sex[5];
}tag;
int main()
{
    tag s1={"張三",20,"15372842487"};//結構體變數的初始化
    printf("%s的年齡是%d,手機號碼為%sn", s1.name, s1.age, s1.telphone);//輸出有關該成員的資訊,通過結構體變數找對應的成員變數
    struct tag s2={"lisa",19,"8725111"};
    printf("%s的年齡是%d,手機號碼為%s", s2.name, s2.age, s2.telphone);
    return 0;
}

結果

結構體成員的存取

結構體變數存取成員:結構體變數的成員是通過點操作符(.)存取的,點操作符接受兩個運算元。

例如:

struct stu
{
    char name[20];
    int age;
}s1={"張三",19};
int main()
{
    printf("%s的年齡是%d", s1.name, s1.age);//s1.name和s1.age就是 通過點操作符存取結構體成員
}

輸出:

張三的年齡是19

結構體傳引數的時候,要傳結構體的地址,其原因是函數傳參的時候,引數是需要壓棧的,如果傳遞一個結構體物件的時候,結構體過大,引數壓棧的系統開銷比較大,因此會導致效能下降。

舉例:

typedef struct stu
{
    char name[20];
    int age;
}stu;
void print1(stu tmp)//傳遞結構體的值
{
    printf("name:%sn", tmp.name);
    printf("age:%dn", tmp.age);
}
void print2(stu* ps)//傳遞結構體的地址,開闢的空間為一個指標的大小(4/8個位元組)
{
    printf("name:%sn", ps->name);
    printf("age:%dn", ps->age);
}
int main()
{
    stu s = { "張三",19 };
    print1(s);
    print2(&s);
    return 0;
}

輸出:

name:張三
age:19
name:張三
age:19

這裡插播一點資料結構的知識:資料結構分為線性資料結構(順序表,連結串列,棧,佇列)和樹形資料結構(二元樹,圖)。

順序表:按照一定的順序將元素儲存起來。

舉例:

連結串列:用一條線將元素連線起來,不要求元素都在同一條線上。

舉例:

棧:元素先進後出,後進先出,元素的出入方式類似於手電筒中的電池一樣,向一個不含任何元素的棧中放入一個元素的過程叫壓棧,刪除棧中的一個元素的過程,叫出棧,棧中元素的刪除也是由棧頂鄉下進行刪除,因此如果想刪除棧中元素,不能直接刪除,必須將在該元素後面放入的元素都進行刪除。

舉例:

範例分析:

int add(int x, int y)
{
    int z = 0;
    z = x + y;
    return z;
}
int main()
{
    int a = 10;
    int b = 20;
    int ret = 0;
    ret = add(a, b);
    printf("%dn",ret);
    return 0;
}

輸出:

30

函數在呼叫的時候,實參的傳遞順序是從右到左,將a,b放入x,y的過程叫壓棧。

到此這篇關於詳解C語言中結構體的使用的文章就介紹到這了,更多相關C語言 結構體內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com