结构是 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;

完整实例

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. struct Books
  5. {
  6. char title[50];
  7. char author[50];
  8. char subject[100];
  9. int book_id;
  10. };
  11. int main( )
  12. {
  13. struct Books Book1; // 声明 Book1,类型为 Book
  14. struct Books Book2; // 声明 Book2,类型为 Book
  15. // Book1 详述
  16. strcpy( Book1.title, "Learn C++ Programming");
  17. strcpy( Book1.author, "Chand Miyan");
  18. strcpy( Book1.subject, "C++ Programming");
  19. Book1.book_id = 6495407;
  20. // Book2 详述
  21. strcpy( Book2.title, "Telecom Billing");
  22. strcpy( Book2.author, "Yakit Singha");
  23. strcpy( Book2.subject, "Telecom");
  24. Book2.book_id = 6495700;
  25. // 输出 Book1 信息
  26. cout << "Book 1 title : " << Book1.title <<endl;
  27. cout << "Book 1 author : " << Book1.author <<endl;
  28. cout << "Book 1 subject : " << Book1.subject <<endl;
  29. cout << "Book 1 id : " << Book1.book_id <<endl;
  30. // 输出 Book2 信息
  31. cout << "Book 2 title : " << Book2.title <<endl;
  32. cout << "Book 2 author : " << Book2.author <<endl;
  33. cout << "Book 2 subject : " << Book2.subject <<endl;
  34. cout << "Book 2 id : " << Book2.book_id <<endl;
  35. return 0;
  36. }
  37. 结果:
  38. Book 1 title : Learn C++ Programming
  39. Book 1 author : Chand Miyan
  40. Book 1 subject : C++ Programming
  41. Book 1 id : 6495407
  42. Book 2 title : Telecom Billing
  43. Book 2 author : Yakit Singha
  44. Book 2 subject : Telecom
  45. Book 2 id : 6495700

结构作为函数参数

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. void printBook( struct Books book );
  5. struct Books
  6. {
  7. char title[50];
  8. char author[50];
  9. char subject[100];
  10. int book_id;
  11. };
  12. int main( )
  13. {
  14. struct Books Book1; // 声明 Book1,类型为 Book
  15. struct Books Book2; // 声明 Book2,类型为 Book
  16. // Book1 详述
  17. strcpy( Book1.title, "Learn C++ Programming");
  18. strcpy( Book1.author, "Chand Miyan");
  19. strcpy( Book1.subject, "C++ Programming");
  20. Book1.book_id = 6495407;
  21. // Book2 详述
  22. strcpy( Book2.title, "Telecom Billing");
  23. strcpy( Book2.author, "Yakit Singha");
  24. strcpy( Book2.subject, "Telecom");
  25. Book2.book_id = 6495700;
  26. // 输出 Book1 信息
  27. printBook( Book1 );
  28. // 输出 Book2 信息
  29. printBook( Book2 );
  30. return 0;
  31. }
  32. void printBook( struct Books book )
  33. {
  34. cout << "Book title : " << book.title <<endl;
  35. cout << "Book author : " << book.author <<endl;
  36. cout << "Book subject : " << book.subject <<endl;
  37. cout << "Book id : " << book.book_id <<endl;
  38. }
  39. 当上面的代码被编译和执行时,它会产生下列结果:
  40. Book title : Learn C++ Programming
  41. Book author : Chand Miyan
  42. Book subject : C++ Programming
  43. Book id : 6495407
  44. Book title : Telecom Billing
  45. Book author : Yakit Singha
  46. Book subject : Telecom
  47. Book id : 6495700

指向结构的指针

定义指向结构的指针Books *book; Books为指针的类型
指针变量中存储结构变量的地址book=&Book1;
使用(获取值)指向该结构的指针访问结构的成员,使用 -> 运算符book->title;

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. void printBook( struct Books *book );
  5. struct Books
  6. {
  7. char title[50];
  8. char author[50];
  9. char subject[100];
  10. int book_id;
  11. };
  12. int main( )
  13. {
  14. struct Books Book1; // 声明 Book1,类型为 Book
  15. struct Books Book2; // 声明 Book2,类型为 Book */
  16. // Book1 详述
  17. strcpy( Book1.title, "Learn C++ Programming");
  18. strcpy( Book1.author, "Chand Miyan");
  19. strcpy( Book1.subject, "C++ Programming");
  20. Book1.book_id = 6495407;
  21. // Book2 详述
  22. strcpy( Book2.title, "Telecom Billing");
  23. strcpy( Book2.author, "Yakit Singha");
  24. strcpy( Book2.subject, "Telecom");
  25. Book2.book_id = 6495700;
  26. // 通过传 Book1 的地址来输出 Book1 信息
  27. printBook( &Book1 );
  28. // 通过传 Book2 的地址来输出 Book2 信息
  29. printBook( &Book2 );
  30. return 0;
  31. }
  32. // 该函数以结构指针作为参数
  33. void printBook( struct Books *book )
  34. {
  35. cout << "Book title : " << book->title <<endl;
  36. cout << "Book author : " << book->author <<endl;
  37. cout << "Book subject : " << book->subject <<endl;
  38. cout << "Book id : " << book->book_id <<endl;
  39. }
  40. 当上面的代码被编译和执行时,它会产生下列结果:
  41. Book title : Learn C++ Programming
  42. Book author : Chand Miyan
  43. Book subject : C++ Programming
  44. Book id : 6495407
  45. Book title : Telecom Billing
  46. Book author : Yakit Singha
  47. Book subject : Telecom
  48. Book id : 6495700

typedef 简化结构

typedef struct
{
char title[50];
char author[50];
char subject[100];
int book_id;
}Books;
现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。
Books Book1, Book2;