EasyC++,結構體初探
大家好,我是梁唐。
這是EasyC++系列的第13篇,咱們來聊聊C++當中的結構體。
想要追求更好閱讀體驗的同學,可以點擊文末的「閱讀原文」,訪問github倉庫。
結構體
定義結構體
數組可以存儲多個同類型的變量,但如果我們想要存儲多個不同類型的變量呢?比如說我們想要存儲一個學生的姓名、年齡、性別、考試分數,這些變量可能string, int, float都有,顯然就不能使用數組了。
為了滿足這樣的存儲要求,我們可以使用C++當中的結構體(struct)。在同一個結構體當中,我們可以定義許多種不同類型的變量,就可以滿足我們各種各樣的需求了。如果我們想要存儲多個這樣的內容,還可以將它定義成數組。
結構體和類已經很接近了,所以理解結構體對于理解面向對象非常有幫助。雖然算法競賽當中一般用不到面向對象,但是對于開發者來說,面向對象可以說是必學的內容。C++ primer中說,結構體是C++ OOP(面向對象編程)的基石。
我們使用關鍵字struct來定義一個結構體:
- struct student {
- string name;
- bool gender;
- double scores;
- };
表示定義了一個結構體,它的類型名是student,花括號當中括起來的內容是結構體的成員變量。注意student是類型名,也就是說我們可以用它來定義出student類型的變量:
- student xiaoming;
- student john;
我們可以用.來訪問結構體內部的元素:
- cout << john.name << endl;
struct的定義有兩種寫法,既可以寫在main函數外部,也可以寫在main函數內部。如:
- // 寫法1
- struct student {
- string name;
- bool gender;
- double scores;
- };
- int main() {
- // do something
- return 0;
- }
- // 寫法2
- int main() {
- struct student {
- string name;
- bool gender;
- double scores;
- };
- // do something
- return 0;
- }
邏輯上兩種方式完全一樣,只是第一種方式student類型可以被任何函數使用,但如果寫在main函數內部,就只能在main函數內部使用。
結構體變量也可以定義在函數內部定義,定義在外部的變量被所有函數所共享,也就是全局變量。C++ primer當中提倡盡量使用外部結構體。
初始化方式
我們可以和數組一樣,在花括號內使用逗號進行分隔,如:
- student xiaoming = {"xiaoming", 1, 3.5};
編譯器會按照順序,分別將"xiaoming"賦值給name,1賦值給gender,3.5賦值給score。我們也可以使用C++11的列表初始化方式省略掉中間的等于號:
- student xiaoming {"xiaoming", 1, 3.5};
結構體數組
定義了結構體之后,我們還可以像是基礎變量類型一樣定義結構體數組。
- struct student {
- string name;
- bool gender;
- double scores;
- };
- student sts[10];
對于結構體數組來說,我們也可以使用列表初始化方式來初始化,由于結構體本身的初始化就用到花括號,所以數組的初始化會使用到花括號的嵌套,像是這樣:
- student sts[2] = {
- {"xiaoming", 1, 3.6},
- {"john", 1, 5.2}
- };