산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 데이터 구조: 배열, 구조체, 포인터로 효율적인 프로그램 만들기

C/C++ 배열은 같은 종류의 데이터 항목 여러 개를 결합한 변수를 정의할 수 있게 하지만, 구조체(structure)는 다른 종류의 데이터 항목들을 결합할 수 있게 하는 또 다른 사용자 정의 데이터 타입입니다.

구조체는 레코드를 표현하는 데 사용됩니다. 도서관의 책들을 추적하고 싶다고 가정해 보세요. 각 책에 대해 다음 속성들을 추적하고 싶을 수 있습니다.

구조체 정의

구조체를 정의하려면 struct 문을 사용해야 합니다. struct 문은 프로그램에 둘 이상의 멤버를 가진 새 데이터 타입을 정의합니다. struct 문의 형식은 다음과 같습니다.

struct [structure tag] {
    member definition;
    member definition;
    ...
    member definition;
} [one or more structure variables];

구조체 태그(structure tag)는 선택 사항이며, 각 멤버 정의는 int i;나 float f; 같은 일반 변수 정의이거나 기타 유효한 변수 정의일 수 있습니다. 구조체 정의의 끝, 마지막 세미콜론 전에 하나 이상의 구조체 변수를 지정할 수 있지만 선택 사항입니다. Book 구조체를 선언하는 방법은 다음과 같습니다.

struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} book;

구조체 멤버 접근

구조체의 멤버에 접근하려면 멤버 접근 연산자(.)를 사용합니다. 멤버 접근 연산자는 구조체 변수 이름과 접근하려는 구조체 멤버 사이에 점을 찍어 코딩합니다. struct 키워드를 사용해 구조체 타입의 변수를 정의합니다. 구조체 사용법을 설명하는 예제:

Live Demo
#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; // Book 타입의 Book1 선언
    struct Books Book2; // Book 타입의 Book2 선언
    // 책 1 사양
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // 책 2 사양
    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

함수 인자로서의 구조체

구조체를 함수 인자로 전달하는 것은 다른 변수나 포인터를 전달하는 것과 매우 유사합니다. 위 예제에서와 유사한 방식으로 구조체 변수에 접근합니다.

Live Demo
#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;
    struct Books Book2;
    // 책 1 사양
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // 책 2 사양
    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;

위 예제를 구조체 포인터를 사용해 다시 작성해 보겠습니다. 이 개념을 이해하기 쉬울 것입니다.

Live Demo
#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;
    struct Books Book2;
    // 책 1 사양
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // 책 2 사양
    strcpy(Book2.title, "Telecom Billing");
    strcpy(Book2.author, "Yakit Singha");
    strcpy(Book2.subject, "Telecom");
    Book2.book_id = 6495700;
    // 구조체 주소 전달하며 Book1 정보 출력
    printBook(&Book1);
    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 포인터입니다.

C 언어

  1. C++ 데이터 타입 이해하기: 기초, 수정자, 모범 사례
  2. C++ 연산자 마스터하기: 유형별 완벽 가이드와 실전 예제
  3. C++ 주석: 가독성 높고 유지보수하기 좋은 코드 작성법
  4. C++ char 타입 마스터: 선언, ASCII 코드, 문자열 변환 기법
  5. 데이터 저장 혁명: 투명 망토 입은 차세대 자기 나노구조
  6. 자바 자료구조: 핵심 클래스와 컬렉션 프레임워크 탐구
  7. C 구조체 마스터: 정의, 멤버 접근, 중첩, 정렬, 패딩, 비트필드
  8. C typedef 완전 가이드: 타입 별칭, 구조체 간소화, 함수 포인터, #define과 차이
  9. C++ 데이터 구조: 배열, 구조체, 포인터로 효율적인 프로그램 만들기
  10. C++ 데이터 추상화 마스터하기: 인터페이스와 구현 분리로 설계 단순화