結構體(struct),是一種用戶自定義復合數據類型,可以包含不同類型的不同成員。
結構體的聲明定義和使用的基本語法:
// 聲明結構體struct 結構體類型
{ 成員1類型 成員1名稱; ...成員N類型 成員N名稱;
};
除聲明外,struct關鍵字可省略
成員的訪問可以通過 . 來進行
結構體成員默認值
在設計一個結構體的時候,可以根據需要向成員設置默認值
如果結構體中的變量,比如name、major_code、dormitory沒有被指定,那么程序就會輸出默認值。
結構體數組
作為用戶自定義數據類型,結構體是支持數組模式的。
// 聲明數組對象
[struct] 結構體類型 數組名[數組長度];
// 賦值數組的每一個元素
數組名[0] = {, , ..., };
數組名[1] = {, , ..., };
...
// 聲明和賦值同步的快捷寫法
[struct] 結構體類型 數組名[數組長度] = {{}, {}, ..., {}};
結構體指針
作為一種數據類型,結構體也是支持使用指針的。
結構體同樣可以使用指針數組,主要用于動態內存分配,方便管理大量結構體占用的內存。
struct Student
{string name;string major_code = "003032"; // 默認專業代碼int dormitory_num = 1; // 默認分配1號樓宿舍
};struct Student stu = {"周杰輪", "003001", 5};struct Student *p = &stu;
通過new操作符申請指針空間
struct Student *p = new Student {"周杰輪", "003001", 5};
使用指針變量訪問結構體成員需要更換操作符號為:->
cout << p->name << endl; // 訪問成員name
cout << p->major_code << endl; // 訪問成員
major_codecout << p->dormitory_num << endl; // 訪問成員dormitory_num
舉例:
#include "iostream"
using namespace std;int main()
{struct Student{string name;int age = 11;string gender = "男";};struct Student arr1[3] = {{"周杰輪"}, {"林軍杰"}, "王力鴻"};struct Student * p1 = arr1; // 數組的對象本質上就是地址(指向數組的第一個元素的位置)cout << "數組的第一個元素中記錄的name是:" << p1[0].name << endl;cout << "數組的第二個元素中記錄的name是:" << p1[1].name << endl;cout << "數組的第三個元素中記錄的name是:" << p1[2].name << endl;// 通過new操作符,自行申請結構體數組的空間(可以通過delete回收)struct Student * p2 =new Student[3] {{"周杰輪"}, {"林軍杰"}, {"王力鴻"}};cout << "數組2的第一個元素中記錄的name是:" << p2[0].name << endl;cout << "數組2的第二個元素中記錄的name是:" << p2[1].name << endl;cout << "數組2的第三個元素中記錄的name是:" << p2[2].name << endl;delete[] p2;return 0;
}
其中,
struct Student * p1 = arr1;
這個可以直接賦值的原因在于arr1表示的是數組,數組就是地址所所以可以直接賦值。
delete[] p2;
在刪除空間地址的時候,需要[ ]這個符號是因為處理的是數組。