[ C++ ] 구조체 사용법

#1 구조체란?

편의상 관련 있는 데이터와 함수를 묶어놓은 것이다. 클래스와 달리 모든 멤버의 접근제한자는 기본적으로 public이다.

#2 구조체 선언하기

struct 키워드를 통해 구조체를 선언한다. 구조체에 포함 된 변수와 함수를 멤버변수, 멤버함수라고 한다.

struct MyStruct
{
    // 멤버변수
    int first;
    int second;

    // 멤버함수
    int Sum() { return first + second; }
}

#3 구조체의 크기 구하기

구조체는 최소한 멤버변수의 크기의 합보다 크거나 같다. sizeof()함수를 통해 크기를 알 수 있다.

    MyStruct a; // 구조체 생성
    cout << sizeof(a) << endl; // 구조체의 크기 반환
    return 0;

#4 구조체 멤버 호출하기

접근연산자(.)를 통해 멤버에 접근한다. 멤버변수, 멤버함수 모두 동일하다.

MyStruct a;

a.first = 100;
a.second = 200;

cout << a.Sum() << endl; // 300

#5 구조체 포인터 만들기

구조체 포인터를 만들 수 있다. 포인터를 만드는 것과 동일하다.

MyStruct a;

MyStruct *p = &a; // 구조체 포인터 선언 및 초기화

#6 포인터로 멤버에 접근하기

구조체 포인터로 구조체 멤버에 접근하려면 접근연산자(.) 대신에 ()를 사용한다.

MyStruct a;
a.first = 100;
a.second = 200;
cout << a.Sum() << endl; // 300

/* 포인터를 통해 멤버 접근 */
MyStruct *p = &a; // 구조체 포인터 선언 및 초기화
p->first = 300;
p->second = 400;
cout << p->Sum() << endl; // 700

cout << a.Sum() << endl; // 700

#7 구조체 배열 만들기

구조체를 원소로 하는 배열도 만들 수 있다.

MyStruct pairs[10];

배열은 내부적으로 포인터를 활용하여 인덱싱을 한다. 하지만 인덱싱을 통해 원소를 반환받은 경우에 원소의 참조가 아니라 원소 자체이므로 접근연산자는 (.)이다.

for(int i = 0; i < 10; i++)
{
    pairs[i].first = i;
    pairs[i].second = 10*i;    
    cout << pairs[i].Sum() << endl;
}