比数组更灵活,可以存储多个类型的数据。
结构式用户定义的类型,结构声明定义了这种类型的数据属性。首先定义结构描述,然后描述创建结构变量。
一般结构声明放在放在main中,或main前面(外部声明)。通常外部声明。
还可以使用赋值运算符 = 将结构赋给另一个同类型的结构。
声明
1 struct inflatable
2 {
3 char name[20];
4 float volume;
5 double price;
6 };
初始化
inflatable guest =
{
"bob", //name
1.88, //volume
29.99 //price
};
inflatable guest {"bob", 1.88, 29.99}//=可选
inflatable mayor {}; //各个成员默认设置为0
使用类似于类的初始化方法,赋初值
1 Definition for a binary tree node. 2 struct TreeNode { 3 int val; 4 TreeNode *left; 5 TreeNode *right; 6 TreeNode(int x) : val(x), left(NULL), right(NULL) {} 7 };
相当于将x赋给val,将NULL赋给left和right。
结构体中的位字段
c++允许指定占用特定位数bit的结构成员。字段类型应为整型或枚举型,接下来是冒号,后面一个数字是指定的使用位数。每个成员都被称为位字段。
1 struct torgle
2 {
3 unsigned int SN : 4; //4 bits for SN value_comp
4 unsigned int : 4;//可以使用没有名称的字段提供间距
5 bool goodIn: 1;
6 };
可以使用标准的结构表示法来访问位字段。
1 torgle tr = {14, true , false};
2 tr.goodIn;//可以成员运算符来访问的
创建对象
1 struct inflatable bat;//c风格 2 inflatable bat;//c++风格
可以同时完成定义结构和创建变量的工作,只需将变量名放在结束括号的后面即可。
1 struct perks
2 {
3 int key_number;
4 char car[10];
5 }mr_smith, ms_jones; //两个变量名
6
7 初始化方式创建
8 struct perks
9 {
10 int key_number;
11 char car[10];
12 }mr_glitz =
13 {
14 7,
15 "hello"
16 };
声明没有名称的结构并创建变量
1 struct
2 {
3 int x;
4 int y;
5 }position;
结构数组:创建元素为结构的数组
1 inflatable gifts[100];
2 //也可以使用成员运算符(.)来访问
3 gifts[2].price;
使用new创建动态结构
动态意味着是在运行时,而不是编译时分配的。
1 struct things
2 {
3 int good;
4 int bad;
5 };
6
7 //创建一个未命名的things类型,并将其地址赋给一个指针。
8 things* ps = new things;
ps是指向结构的指针,所以ps->good就表示该结构的成员good,等同于(*ps).good