结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:
- Title 标题
- Author 作者
- Subject 主题
- Book ID 图书编号
struct定义结构
定义一个结构struct Books{char title[50];char author[50];char subject[100];int book_id;}book;
Books是整个结构的名称
{ }就是普通的定义变量,上面定义的是数组和整型
book是结构变量。
结构变量可以在定义结构体时定义,也可以之后在其他地方定义。比如struct Books book;一般都在其他地方定义
访问结构成员:
一个结构变量就相当于有很多个成员变量属性的对象。
使用strcpy()给结构变量的char字符串类型的属性赋值,比如strcpy( Book1.title, "c++从入门到精通");
因为char类型数组要一次性写入多个字符必须借助strcpy函数
string字符串型,数值型,布尔型,char可以直接赋值。比如Book1.id=123;
使用.可以获取结构变量的某个属性的值;比如cout<<Book1.title<<endl;
完整实例
#include <iostream>#include <cstring>using namespace std;struct Books{char title[50];char author[50];char subject[100];int book_id;};int main( ){struct Books Book1; // 声明 Book1,类型为 Bookstruct Books Book2; // 声明 Book2,类型为 Book// Book1 详述strcpy( Book1.title, "Learn C++ Programming");strcpy( Book1.author, "Chand Miyan");strcpy( Book1.subject, "C++ Programming");Book1.book_id = 6495407;// Book2 详述strcpy( Book2.title, "Telecom Billing");strcpy( Book2.author, "Yakit Singha");strcpy( Book2.subject, "Telecom");Book2.book_id = 6495700;// 输出 Book1 信息cout << "Book 1 title : " << Book1.title <<endl;cout << "Book 1 author : " << Book1.author <<endl;cout << "Book 1 subject : " << Book1.subject <<endl;cout << "Book 1 id : " << Book1.book_id <<endl;// 输出 Book2 信息cout << "Book 2 title : " << Book2.title <<endl;cout << "Book 2 author : " << Book2.author <<endl;cout << "Book 2 subject : " << Book2.subject <<endl;cout << "Book 2 id : " << Book2.book_id <<endl;return 0;}结果:Book 1 title : Learn C++ ProgrammingBook 1 author : Chand MiyanBook 1 subject : C++ ProgrammingBook 1 id : 6495407Book 2 title : Telecom BillingBook 2 author : Yakit SinghaBook 2 subject : TelecomBook 2 id : 6495700
结构作为函数参数
#include <iostream>#include <cstring>using namespace std;void printBook( struct Books book );struct Books{char title[50];char author[50];char subject[100];int book_id;};int main( ){struct Books Book1; // 声明 Book1,类型为 Bookstruct Books Book2; // 声明 Book2,类型为 Book// Book1 详述strcpy( Book1.title, "Learn C++ Programming");strcpy( Book1.author, "Chand Miyan");strcpy( Book1.subject, "C++ Programming");Book1.book_id = 6495407;// Book2 详述strcpy( Book2.title, "Telecom Billing");strcpy( Book2.author, "Yakit Singha");strcpy( Book2.subject, "Telecom");Book2.book_id = 6495700;// 输出 Book1 信息printBook( Book1 );// 输出 Book2 信息printBook( Book2 );return 0;}void printBook( struct Books book ){cout << "Book title : " << book.title <<endl;cout << "Book author : " << book.author <<endl;cout << "Book subject : " << book.subject <<endl;cout << "Book id : " << book.book_id <<endl;}当上面的代码被编译和执行时,它会产生下列结果:Book title : Learn C++ ProgrammingBook author : Chand MiyanBook subject : C++ ProgrammingBook id : 6495407Book title : Telecom BillingBook author : Yakit SinghaBook subject : TelecomBook id : 6495700
指向结构的指针
定义指向结构的指针Books *book; Books为指针的类型
指针变量中存储结构变量的地址book=&Book1;
使用(获取值)指向该结构的指针访问结构的成员,使用 -> 运算符book->title;
#include <iostream>#include <cstring>using namespace std;void printBook( struct Books *book );struct Books{char title[50];char author[50];char subject[100];int book_id;};int main( ){struct Books Book1; // 声明 Book1,类型为 Bookstruct Books Book2; // 声明 Book2,类型为 Book */// Book1 详述strcpy( Book1.title, "Learn C++ Programming");strcpy( Book1.author, "Chand Miyan");strcpy( Book1.subject, "C++ Programming");Book1.book_id = 6495407;// Book2 详述strcpy( Book2.title, "Telecom Billing");strcpy( Book2.author, "Yakit Singha");strcpy( Book2.subject, "Telecom");Book2.book_id = 6495700;// 通过传 Book1 的地址来输出 Book1 信息printBook( &Book1 );// 通过传 Book2 的地址来输出 Book2 信息printBook( &Book2 );return 0;}// 该函数以结构指针作为参数void printBook( struct Books *book ){cout << "Book title : " << book->title <<endl;cout << "Book author : " << book->author <<endl;cout << "Book subject : " << book->subject <<endl;cout << "Book id : " << book->book_id <<endl;}当上面的代码被编译和执行时,它会产生下列结果:Book title : Learn C++ ProgrammingBook author : Chand MiyanBook subject : C++ ProgrammingBook id : 6495407Book title : Telecom BillingBook author : Yakit SinghaBook subject : TelecomBook id : 6495700
typedef 简化结构
typedef struct{char title[50];char author[50];char subject[100];int book_id;}Books;
现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。Books Book1, Book2;
