C++

C++ 구조체

Machine_웅 2022. 10. 27. 15:14
728x90
반응형

구조체란?

구조체(structure type)란 사용자가 C++의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다.

구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다.

 

배열이 같은 타입의 변수 집합이라고 한다면,

구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것입니다.

 

이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 합니다.

 

C++의 구조체는 변수뿐만 아니라 함수까지도 멤버 변수로 가질 수 있습니다.

또한, C++의 구조체는 타입일 뿐만 아니라, 객체 지향 프로그래밍의 핵심이 되는 클래스(class)의 기초가 됩니다.


구조체 선언

struct 구조체이름

{
    멤버변수1의타입 멤버변수1의이름;
    멤버변수2의타입 멤버변수2의이름;
    ...
    int idx;
    string name;
    int age;
    char address[100];
};

 

이렇게 선언된 구조체 타입을 가지고 다음과 같이 구조체 변수를 선언할 수 있습니다

문법 
struct 구조체이름 구조체변수이름;

 예시  )  struct Book web_book;


구조체 멤버로의 접근 방법

배열에서는 인덱스를 이용하여 배열 요소에 접근할 수 있습니다.

하지만 구조체에서 구조체 멤버로 접근하려고 할 때는 멤버 참조 연산자(.)를 사용해야 합니다.

구조체 멤버로의 접근 방법은 다음과 같습니다.

문법
구조체변수이름.멤버변수이름
예제 ) web_book.author

구조체 변수의 초기화

C++에서 구조체 변수는 중괄호({})를 사용한 초기화 리스트를 사용하여 초기화합니다.

문법
구조체변수이름 = {멤버변수1의초깃값, 멤버변수2의초깃값, ...};

예제 )  web_book = {"HTML과 CSS", "홍길동", 28000};

 


사용 예제 

struct book {
    string title;
    string author;
    int price;
};

book web_book = {"HTML과 CSS", "홍길동", 28000};
book java_book = {"Java language", "이순신"};

중첩된 구조체

C++에서는 구조체를 정의할 때 멤버 변수로 또 다른 구조체를 포함할 수 있습니다.

struct Name{
    string first;
    string last;
};

struct Friends{
    Name first_name;
    string address;
    string job;
};

구조체의 메모리 크기

구조체를 메모리에 할당할 때 컴파일러는

프로그램의 속도 향상을 위해 바이트 패딩(byte padding)이라는 규칙을 이용합니다.

 

구조체는 다양한 크기의 타입을 멤버 변수로 가질 수 있는 타입입니다.

하지만 컴파일러는 메모리의 접근을 쉽게 하려고 크기가 가장 큰 멤버 변수를 기준으로

모든 멤버 변수의 메모리 크기를 맞추게 됩니다.

 

이것을 바이트 패딩이라고 하며,

이때 추가되는 바이트를 패딩 바이트(padding byte)라고 합니다.

 

728x90
반응형

'C++' 카테고리의 다른 글

C++ 클래스 생성 / 헤더파일.  (0) 2022.10.28
C++ 함수 포인터  (0) 2022.10.27
C++ 공용체 ( union )  (0) 2022.10.27
메모리의 동적 할당(dynamic allocation)  (0) 2022.10.27
C++ 학습 참고 사이트  (0) 2022.10.26