C++ 데이터 구조
C/C++ 배열을 사용하면 동일한 유형의 데이터 항목을 저장할 수 있는 변수를 정의할 수 있지만 구조는 C++에서 사용할 수 있는 또 다른 사용자 정의 데이터 유형으로, 다양한 유형의 데이터 항목을 저장할 수 있습니다.
구조는 레코드를 나타내는 데 사용됩니다. 도서관에 있는 책의 역학을 추적하고 싶다면 각 책의 다음 속성을 추적해야 할 수도 있습니다.
Title
Author
제목
-
책 ID
구조 정의
구조를 정의하려면 struct 문을 사용해야 합니다. struct 문은 여러 멤버를 포함하는 새로운 데이터 유형을 정의합니다.
struct [structure tag] { member definition; member definition; ... member definition; } [one or more structure variables];
구조 태그는 선택 사항이며 각 멤버 정의는 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; // 声明 Book1,类型为 Book struct 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++ 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
함수 매개변수로서의 구조체
구조체를 함수 매개변수로 사용할 수 있으며, 매개변수 전달 방법은 다른 Type 변수와 동일하거나 포인터가 유사합니다. 위 예의 방식을 사용하여 구조 변수에 액세스할 수 있습니다.
#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,类型为 Book struct 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++ 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; // 声明 Book1,类型为 Book struct 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++ 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;
이제 struct 키워드를 사용하지 않고 Books를 직접 사용하여 Books 유형의 변수를 정의할 수 있습니다. 예는 다음과 같습니다.
Books Book1, Book2;
typedef 키워드를 사용하여 다음과 같이 비구조적 유형을 정의할 수 있습니다.
typedef long int *pint32; pint32 x, y, z;
x, y 및 z는 모두 long int에 대한 포인터입니다.