一、定義和使用Struct
Struct是C語言中構建複雜數據類型的基礎。它可以包含多個不同的變數,並且可以用一個變數名引用它們。定義一個struct需要先定義它的類型名,再定義結構體的變數。
/* 定義struct類型 */ struct Person { char name[20]; int age; int id; }; /* 定義struct變數 */ struct Person someone;
在定義一個struct變數時,可以直接為其中的變數賦初值。
/* 直接為變數賦初值 */ struct Person someone = {"Tom", 20, 123456};
訪問struct變數的成員可以使用「.」運算符。
/* 訪問某一成員 */ printf("Name: %s\n", someone.name);
二、Struct和指針
使用struct指針可以更方便地訪問和修改struct的成員。在定義struct類型時,加上「*」可以定義一個指向該類型的指針。
/* 定義指向Person類型的指針 */ struct Person *ptr;
訪問struct變數的成員可以使用「->」運算符。
/* 使用指針訪問變數 */ ptr = &someone; printf("Age: %d\n", ptr->age);
同時,使用指針可以更方便地傳遞struct類型的參數。
/* 傳遞指針作為參數 */ void display(struct Person *p) { printf("ID: %d\n", p->id); } display(&someone);
三、Struct和數組
數組可以存儲多個相同類型的數據,struct也可以存儲多個相同類型的數據。使用數組和struct可以構建更複雜的數據結構。
/* 定義存儲多個Person類型的數組 */ struct Person group[3]; /* 初始化數組 */ group[0] = {"Tom", 20, 123456}; group[1] = {"John", 21, 234567}; group[2] = {"Mary", 22, 345678}; /* 輸出數組中第二個元素的名字 */ printf("Name: %s", group[1].name);
可以使用指針遍曆數組中的元素,並訪問其成員。
/* 使用指針遍曆數組並輸出其成員 */ for(int i=0; iname); }
四、Struct和文件讀寫
Struct可以使用文件進行讀寫操作,以此實現文件的持久化存儲。
/* 打開文件 */ FILE *fp; fp = fopen("test.txt", "w"); /* 定義並寫入struct */ struct Person someone = {"Tom", 20, 123456}; fwrite(&someone, sizeof(struct Person), 1, fp); /* 關閉文件 */ fclose(fp);
可以使用fread函數從文件中讀取struct數據。
/* 打開文件 */ fp = fopen("test.txt", "r"); /* 讀取文件並輸出內容 */ struct Person temp; fread(&temp, sizeof(struct Person), 1, fp); printf("Name: %s\nAge: %d\nID: %d\n", temp.name, temp.age, temp.id); /* 關閉文件 */ fclose(fp);
五、Struct的高級應用
Struct還有很多高級應用,例如在struct中嵌套其他struct、使用typedef定義新類型、使用聯合體構建新類型等等。
/* 嵌套struct */ struct Date { int year; int month; int day; }; struct Student { char name[20]; struct Date birth; }; /* 使用typedef定義新類型 */ typedef struct { char name[20]; int age; } Person; /* 使用聯合體構建新類型 */ union Data { int count; float weight; }; struct Item { int type; union Data info; };
原創文章,作者:ZBPPU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/368578.html