結(jié)構(gòu)體是什么?
結(jié)構(gòu)體就是把多個變量包裝在一起勋篓,結(jié)構(gòu)體也可以作為類型使用婆跑,你可以定義結(jié)構(gòu)體變量此熬,結(jié)構(gòu)體指針。
為什么需要結(jié)構(gòu)體滑进?
想象現(xiàn)在有一個函數(shù) char* findStudentName(char* no)犀忱,它通過學(xué)號查找學(xué)生姓名。當(dāng)我們僅僅需要查找學(xué)生姓名時扶关,是沒問題的阴汇。假設(shè)現(xiàn)在我們還需要獲取到年齡,性別节槐,聯(lián)系電話搀庶,班級這些信息呢?你可能會想到我們是不是應(yīng)該再寫幾個諸如 findStudentAge, findStudentSex, findStudentPhone, findStudentClass 這樣的函數(shù)铜异。僅從功能上來說這樣確實可以解決問題哥倔,但是這個方案不好,因為往往需要多次調(diào)用才能獲取到需要的全部信息揍庄,等到你了解到數(shù)據(jù)庫之類的技術(shù)后咆蒿,你就會認(rèn)識到這個方案在運行速度上也是不能接受的。
上面提到的這些函數(shù)大部分都是返回 char* 類型币绩,現(xiàn)在想象一下蜡秽,假設(shè)有個類型就叫 Student,這個 Student 類型包含了你所需要的所有的學(xué)生信息缆镣。那么上面的問題是不是就可以用一個 Student findStudent(char* no) 函數(shù)解決了芽突?這里提到的 Student 類型在 C 語言中就是通過結(jié)構(gòu)體來實現(xiàn)。
怎么做董瞻?
首先要定義上面提到的結(jié)構(gòu)體 Student
struct Student {
char* name;
char* sex;
int age;
char* class;
char* no;
char* phone;
};
struct 是定義和使用結(jié)構(gòu)體的關(guān)鍵字寞蚌,后面的 Student 是結(jié)構(gòu)體的名字田巴,用花括號包起來的是結(jié)構(gòu)體的成員定義,多個成員之間用分號分割挟秤,每個成員需要指明類型和名字壹哺。
接下來看下結(jié)構(gòu)體的使用代碼
struct Student findStudent(char* no) { //注意函數(shù)的返回值是 struct Student
struct Student student; //聲明結(jié)構(gòu)體變量
student.age = 20; //給結(jié)構(gòu)體成員賦值
student.name = "小明";
student.sex = "男";
student.class = "一年級七班";
student.no = no;
student.phone = "18282828282";
return student;
}
這個 findStudent 函數(shù)返回了一個 Student 結(jié)構(gòu)體,在代碼中你可以看到如何聲明一個結(jié)構(gòu)體變量艘刚,如何給每個成員賦值管宵。
最后添加一個 main 函數(shù),嘗試調(diào)用以上代碼
int main() {
struct Student student = findStudent("1140707");
printf("%s, %s, %d, %s, %s, %s", student.name, student.sex
, student.age, student.class, student.no, student.phone);
return 0;
}
現(xiàn)在把以上代碼復(fù)制到你的編輯器中編譯運行試試看攀甚。注意結(jié)構(gòu)體和函數(shù)的聲明要在使用前箩朴。