结构体是用户定义的类型,而结构声明定义了这种类型的数据属性。
1 struct inflatable // structure declaration 2 { 3 char name[20]; 4 float volume; 5 double price; 6 };
关键字 struct 表明,这些代码定义的是一个结构体的布局。标识符 inflatable 是这种数据格式的名称,因此新类型的名称为 inflatable。这样,便可以像创建 char 或 int 类型的变量那样创建 inflatable 类型的变量类。
struct inflatable goose; // keyword struct required in C inflatable vincent; // keyword struct not required in C++
在C++中,结构体表示的用法与基本类型名相同。这种变化强调的是,结构体声明定义了一种新类型。在C++中,省略 struct 不会出错。
1. 在程序中使用结构体
1 // structure00.cpp -- a simple structure - 外部声明 2 #include <iostream> 3 struct inflatable // structure declaration 4 { 5 char name[20]; 6 float volume; 7 double price; 8 }; 9 10 int main() 11 { 12 using namespace std; 13 inflatable guest = 14 { 15 "Glorious Gloria", 16 1.88, 17 29.99 18 }; 19 cout << guest.name << " "<<guest.volume << " " 20 << guest.price << endl; 21 return 0; 22 }
1 // structure01.cpp -- a simple structure -- 内部声明 2 void inner_structDeclaration() 3 { 4 struct inflatable 5 { 6 char name[20]; 7 float volume; 8 double price; 9 }; 10 inflatable guest = 11 { 12 "Glorious Gloria", 13 1.88, 14 29.99 15 }; 16 cout << guest.name << " " << guest.volume << " " 17 << guest.price << endl; 18 return 0; 19 }
structure00.cpp, structure01.cpp中分别显示了结构体的外部声明:外部声明可以在被其后面的任何函数使用;而内部声明只能被该声明所属的函数使用。
2. C++结构体初始化
(1)C++支持将列表初始化用于结构,且等号(=)是可选的
1 inflatable duck {"Dephne", 0.12, 0.98}; // can omit ‘=‘ in C++
(2)其次,如果大括号内未包含任何东西,各个成员都将被设置为零。例如
1 inflatable mayor {};
默认 mayor.name = "" , mayor.volume = 0.0 并且 mayor.price = 0.0
(3)最后,不允许结构体类型做缩窄转换
3. 成员赋值
使用赋值运算符(=)将结构体赋给另一个同类型的结构体,这样结构体中每个成员都将被设置为另一个结构体中都的相应成员的值,即使成员是数组。这种赋值被成为成员赋值(memberwise assignment)
1 // assign_st.cpp -- assigning structure 2 #include <iostream> 3 struct inflatable 4 { 5 char name[20]; 6 float volume; 7 double price; 8 }; 9 int main() 10 { 11 using namespace std; 12 inflatable bouget = 13 { 14 "sunflowers", 15 0.20, 16 12.49 17 }; 18 inflatable choice = bouget; 19 cout << choice.name << " " << choice.volume << " " 20 << choice.price << endl; 21 return 0; 22 }
4. 结构体数组
1 // arrstruc.cpp --- an array of structures 2 #include <iostream> 3 struct inflatable 4 { 5 char name[20]; 6 float volume; 7 double price; 8 }; 9 int main() 10 { 11 using namespace std; 12 inflatable guests[2] = 13 { 14 {"Bambi", 0.5, 21.99}, 15 {"Godzilla", 2000, 565.99} 16 }; 17 cout << "The guests: " << guests[0].name << " and " << guests[1].name << "\n have a combined volume of " << guests[0].volume + guests[1].volume << " cubic feet.\n"; 18 return 0; 19 }
同时完成定义结构体和创建结构体变量的工作
1 struct perks 2 { 3 int key_number; 4 char car[12]; 5 } mr_smith, ms_jones; // two perks variable
1 struct perks 2 { 3 int key_number; 4 char car[12]; 5 } mr_glitz = 6 { 7 7, // value for mr_glitz.key_number member 8 "Packard" // value for mr_glitz.car member 9 };
还可以声明没有名称的机构体类型,方法是省略名称,同时定义一种结构类型和一个这种类型的变量:
1 struct 2 { 3 int x; // 2 members 4 int y; 5 } position; // a structure variable
5. 结构体的位字段
1 struct torgle_register 2 { 3 unsigned int SN:4; // 4 bits for SN value 4 unsigned int: 4; // 4 bits unused 5 bool goodIn:1; // valid input (1 bit) 6 bool goodTorgle:1; // successful torgling 7 };
原文:https://www.cnblogs.com/gaolee/p/14399192.html