共計(jì) 1917 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
在 C 語言中,結(jié)構(gòu)體是一種用戶自定義數(shù)據(jù)類型,它可以存儲(chǔ)不同類型的數(shù)據(jù)并且允許程序員在一個(gè)單獨(dú)的變量內(nèi)組合它們。本文將詳細(xì)介紹 C 語言中結(jié)構(gòu)體的類型及用法。
什么是結(jié)構(gòu)體
結(jié)構(gòu)體是 C 語言中的一種復(fù)合數(shù)據(jù)類型,可以定義由不同數(shù)據(jù)類型組成的數(shù)據(jù)集合。結(jié)構(gòu)體由多個(gè)成員組成,每個(gè)成員可以是不同類型的數(shù)據(jù),比如整型、字符型、浮點(diǎn)型等。結(jié)構(gòu)體的定義方式如下:
“`
struct structName {
dataType1 memberName1;
dataType2 memberName2;
…
dataTypeN memberNameN;
};
其中 structName 為結(jié)構(gòu)體名,memberName 為成員名,dataType 為成員的數(shù)據(jù)類型。我們可以定義一個(gè)包含學(xué)生姓名、年齡和分?jǐn)?shù)的結(jié)構(gòu)體:
struct Student {
char name[20];
int age;
float score;
結(jié)構(gòu)體的使用
定義結(jié)構(gòu)體之后,我們就可以使用它來聲明變量,例如:
struct Student stu1;
這樣就創(chuàng)建了一個(gè)名為 stu1 的結(jié)構(gòu)體變量。我們可以通過點(diǎn)操作符訪問結(jié)構(gòu)體中的成員,例如:
strcpy(stu1.name, “Tom”);
stu1.age = 18;
stu1.score = 90.5;
這樣就為結(jié)構(gòu)體變量 stu1 的成員賦值了。我們也可以用另一個(gè)結(jié)構(gòu)體變量來初始化一個(gè)結(jié)構(gòu)體:
struct Student stu2 = {“Alice”, 17, 95.0};
這樣就初始化了一個(gè)名為 stu2 的結(jié)構(gòu)體變量。我們也可以使用指針來訪問結(jié)構(gòu)體的成員:
struct Student *p = &stu1;
strcpy(p->name, “Bob”);
p->age = 19;
p->score = 88.0;
這里的 p 是一個(gè)指向結(jié)構(gòu)體的指針,用“->”操作符來訪問結(jié)構(gòu)體的成員。
結(jié)構(gòu)體數(shù)組
除了單個(gè)結(jié)構(gòu)體變量外,我們還可以定義結(jié)構(gòu)體數(shù)組來存儲(chǔ)多個(gè)結(jié)構(gòu)體變量,例如:
struct Student stuArr[3] = {
{“Tom”, 18, 90.5},
{“Alice”, 17, 95.0},
{“Bob”, 19, 88.0}
這樣就創(chuàng)建了一個(gè)包含 3 個(gè)學(xué)生信息的結(jié)構(gòu)體數(shù)組。我們可以通過下標(biāo)來訪問每個(gè)結(jié)構(gòu)體變量的成員,例如:
printf(“%s %d %.1f\n”, stuArr[0].name, stuArr[0].age, stuArr[0].score);
這樣就可以輸出第一個(gè)學(xué)生的信息。
結(jié)構(gòu)體指針
結(jié)構(gòu)體指針是指向結(jié)構(gòu)體的指針,與普通指針類似,可以通過指針來訪問結(jié)構(gòu)體的成員。例如:
struct Student *pStu = &stu1;
printf(“%s %d %.1f\n”, pStu->name, pStu->age, pStu->score);
這樣就可以輸出 stu1 的信息。
結(jié)構(gòu)體作為函數(shù)參數(shù)
結(jié)構(gòu)體可以作為函數(shù)的參數(shù)進(jìn)行傳遞,這樣可以方便地傳遞多個(gè)變量。我們可以定義一個(gè)打印學(xué)生信息的函數(shù):
void printStu(struct Student stu) {
printf(“%s %d %.1f\n”, stu.name, stu.age, stu.score);
}
然后可以通過下面的方式來調(diào)用該函數(shù):
printStu(stu1);
這樣就會(huì)輸出 stu1 的信息。
結(jié)構(gòu)體嵌套
結(jié)構(gòu)體可以嵌套定義,也就是在一個(gè)結(jié)構(gòu)體中包含另一個(gè)結(jié)構(gòu)體作為成員,例如:
struct Course {
float credit;
struct Score {
struct Student stu;
struct Course course;
這里定義了一個(gè) Score 的結(jié)構(gòu)體,其中包含了 Student 和 Course 兩個(gè)結(jié)構(gòu)體作為成員,以及一個(gè)分?jǐn)?shù) score。我們可以通過點(diǎn)操作符訪問嵌套的結(jié)構(gòu)體成員,例如:
struct Score sc = {stu1, {“C Programming”, 2.0}, 90.5};
printf(“%s %s %.1f\n”, sc.stu.name, sc.course.name, sc.score);
這樣就可以輸出 sc 的信息。
結(jié)構(gòu)體的大小
結(jié)構(gòu)體的大小是由其成員的大小決定的,每個(gè)成員的地址都是按照其在結(jié)構(gòu)體中的定義順序依次排列的,并且每個(gè)成員的地址都是按照其對(duì)齊方式對(duì)齊的。結(jié)構(gòu)體的大小可以通過 sizeof 運(yùn)算符來獲取,例如:
printf(“%d\n”, sizeof(struct Student));
這樣就可以輸出 Student 結(jié)構(gòu)體的大小。
本文介紹了 C 語言中結(jié)構(gòu)體的類型及用法,包括結(jié)構(gòu)體的定義、結(jié)構(gòu)體的使用、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針、結(jié)構(gòu)體作為函數(shù)參數(shù)、結(jié)構(gòu)體嵌套、結(jié)構(gòu)體的大小等方面。結(jié)構(gòu)體是 C 語言中非常常用的數(shù)據(jù)類型之一,掌握其用法對(duì)于編寫高效的程序非常重要。
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!