C++ 结构体

  • 数据结构

    C/C++数组允许您定义组合多个相同类型数据项的变量,但是结构是另一种用户定义的数据类型,它允许您组合不同类型的数据项。假设您想跟踪图书馆中的书籍,则使用结构来表示记录。您可能需要跟踪有关每本书的以下属性-
    • 标题
    • 作者
    • 学科
    • 书号
  • 定义结构

    要定义结构,必须使用struct语句。struct语句为您的程序定义了一个新数据类型,该数据类型具有多个成员。struct语句的格式如下:
    
    struct [structure tag] {
       member definition;
       member definition;
       ...
       member definition;
    } [one or more structure variables];  
    
    structure tag是可选的,并且每个member定义是一个正常的变量定义,例如int i; 或 float f; 或任何其他有效的变量定义。在结构定义的最后,最后一个分号之前,您可以指定一个或多个结构变量,但这是可选的。
    这是您声明Book结构的方式-
    
    struct Books {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    } book; 
    
  • 访问结构成员

    要访问结构的任何成员,我们使用成员访问运算符(.)。成员访问运算符被编码为结构变量名和我们希望访问的结构成员之间的点。您将使用struct关键字定义结构类型的变量。以下是解释结构用法的示例-
    
    #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;        // Declare Book1 of type Book
       struct Books Book2;        // Declare Book2 of type Book
     
       // book 1 specification
       strcpy( Book1.title, "Learn C++ Programming");
       strcpy( Book1.author, "Chand Miyan"); 
       strcpy( Book1.subject, "C++ Programming");
       Book1.book_id = 6495407;
    
       // book 2 specification
       strcpy( Book2.title, "Telecom Billing");
       strcpy( Book2.author, "Yakit Singha");
       strcpy( Book2.subject, "Telecom");
       Book2.book_id = 6495700;
     
       // Print Book1 info
       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;
    
       // Print Book2 info
       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++ Programming
    Book 1 author : Chand Miyan
    Book 1 subject : C++ Programming
    Book 1 id : 6495407
    Book 2 title : Telecom Billing
    Book 2 author : Yakit Singha
    Book 2 subject : Telecom
    Book 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;        // Declare Book1 of type Book
       struct Books Book2;        // Declare Book2 of type Book
     
       // book 1 specification
       strcpy( Book1.title, "Learn C++ Programming");
       strcpy( Book1.author, "Chand Miyan"); 
       strcpy( Book1.subject, "C++ Programming");
       Book1.book_id = 6495407;
    
       // book 2 specification
       strcpy( Book2.title, "Telecom Billing");
       strcpy( Book2.author, "Yakit Singha");
       strcpy( Book2.subject, "Telecom");
       Book2.book_id = 6495700;
     
       // Print Book1 info
       printBook( Book1 );
    
       // Print Book2 info
       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++ Programming
    Book author : Chand Miyan
    Book subject : C++ Programming
    Book id : 6495407
    Book title : Telecom Billing
    Book author : Yakit Singha
    Book subject : Telecom
    Book id : 6495700
    
  • 指向结构的指针

    您可以按照与定义任何其他变量的指针非常相似的方式定义指向结构的指针,如下所示:
    
    struct Books *struct_pointer;
    
    现在,您可以将结构变量的地址存储在上面定义的指针变量中。要找到结构变量的地址,请将&运算符放在结构名称之前,如下所示:
    
    struct_pointer = &Book1;
    
    要使用指向结构的指针来访问该结构的成员,必须使用->运算符,如下所示:
    
    struct_pointer->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;        // Declare Book1 of type Book
       struct Books Book2;        // Declare Book2 of type Book
     
       // Book 1 specification
       strcpy( Book1.title, "Learn C++ Programming");
       strcpy( Book1.author, "Chand Miyan"); 
       strcpy( Book1.subject, "C++ Programming");
       Book1.book_id = 6495407;
    
       // Book 2 specification
       strcpy( Book2.title, "Telecom Billing");
       strcpy( Book2.author, "Yakit Singha");
       strcpy( Book2.subject, "Telecom");
       Book2.book_id = 6495700;
     
       // Print Book1 info, passing address of structure
       printBook( &Book1 );
    
       // Print Book1 info, passing address of structure
       printBook( &Book2 );
    
       return 0;
    }
    
    // This function accept pointer to structure as parameter.
    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++ Programming
    Book author : Chand Miyan
    Book subject : C++ Programming
    Book id : 6495407
    Book title : Telecom Billing
    Book author : Yakit Singha
    Book subject : Telecom
    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;
    
    您可以对非结构使用typedef关键字,如下所示:
    
    typedef long int *pint32;
     
    pint32 x, y, z;