[C++] 구조체 (struct)

chxxrin·2024년 7월 24일
0

C++

목록 보기
13/22

구조체 사용

struct MyStruct
{
    int first;
    int second;
    // ... 추가 가능

    int Sum()
    {
        return first + second; // 여기서는 . 을 찍지 않아도 된다
    }
};

구조체 정의

  • 구조체명 변수명;
  • member(.) operator 사용
  • 구조체의 크기는 구조체 안의 멤버변수들의 크기의 총합보다 같거나 커야한다!!
MyStruct a; 
a.first = 123; // 4 byte
a.second = 456; // 4 byte

포인터

  • 포인터는 member(->) operator가 화살표
    MyStruct *ptr_a = &a;
    
    // -6 으로 변경하면?
    ptr_a -> first = -6;
  • a.firstptr_a -> first는 같다

배열에서 구조체 사용

  • pairs 자체가 포인터
  • pairs를 쓰면 구조체 배열의 각각의 원소 및 함수 에 접근할 수 있다
  • 배열일 경우 인덱싱을 먼저 한 다음에 사용해야함
  • 즉, 문자열에서 구조체를 사용하는 것과 달리 pairs->first는 사용할 수 없고 반드시 pairs[i].first로 사용해야한다.
    MyStruct pairs[10];
    for (int i = 0; i < 10; i++)
    {
        // pairs->first = i; // error
        // pairs->second = i * 10; // error

        pairs[i].first = i; 
        pairs[i].second = i * 10;
    }

main 함수

int main()
{
    // member(.) operator
    MyStruct a; // 구조체명 변수명;
    a.first = 123; // 4 byte
    a.second = 456; // 4 byte

    cout << sizeof(a) << endl; // 구조체의 크기는 구조체 안의 멤버변수들의 크기의 총합보다 같거나 커야한다!!8 byte
    
    cout << a.Sum() << endl; // 123 + 456 = 579

    // 포인터는 member(->) operator가 화살표
    MyStruct *ptr_a = &a;

    // -6 으로 변경하면?
    ptr_a -> first = -6;

    cout << a.first << " " << a.second << " " << a.Sum() << endl;
    // -6 456 450

    cout << ptr_a->first << " " << ptr_a->second << " " << ptr_a->Sum() << endl;
    // -6 456 450
    // 똑같이 나옴

    // 배열도 가능
    // pairs를 쓰면 배열의 각각의 원소에 접근할 수 있다
    // pairs 자체가 포인터
    MyStruct pairs[10];

    for (int i = 0; i < 10; i++)
    {
        // pairs->first = i; // 주의
        // pairs->second = i * 10;

        pairs[i].first = i; // 배열일 경우 인덱싱을 먼저 한 다음에 사용해야함
        pairs[i].second = i * 10;
    }

    for (int i = 0; i < 10; i++)
    {
        cout << pairs[i].Sum() << endl; // pairs라는 배열에 먼저 인덱싱을 하고 Sum()함수를 적용
        // 0
        // 11
        // 22
        // 33
        // 44
        // 55
        // 66
        // 77
        // 88
        // 99
    }

    return 0;
}

전체코드

/*
    홍정모 연구소 https://honglab.co.kr/
*/

#include <iostream>
#include <cstring>

using namespace std;

struct MyStruct
{
    int first;
    int second;
    // ... 추가 가능

    int Sum()
    {
        return first + second; // 여기서는 . 을 찍지 않아도 된다
    }
};

int main()
{
    // member(.) operator
    MyStruct a; // 구조체명 변수명;
    a.first = 123; // 4 byte
    a.second = 456; // 4 byte

    cout << sizeof(a) << endl; // 구조체의 크기는 구조체 안의 멤버변수들의 크기의 총합보다 같거나 커야한다!!8 byte
    
    cout << a.Sum() << endl; // 123 + 456 = 579

    // 포인터는 member(->) operator가 화살표
    MyStruct *ptr_a = &a;

    // -6 으로 변경하면?
    ptr_a -> first = -6;

    cout << a.first << " " << a.second << " " << a.Sum() << endl;
    // -6 456 450

    cout << ptr_a->first << " " << ptr_a->second << " " << ptr_a->Sum() << endl;
    // -6 456 450
    // 똑같이 나옴

    // 배열도 가능
    // pairs를 쓰면 배열의 각각의 원소에 접근할 수 있다
    // pairs 자체가 포인터
    MyStruct pairs[10];

    for (int i = 0; i < 10; i++)
    {
        // pairs->first = i; // 주의
        // pairs->second = i * 10;

        pairs[i].first = i; // 배열일 경우 인덱싱을 먼저 한 다음에 사용해야함
        pairs[i].second = i * 10;
    }

    for (int i = 0; i < 10; i++)
    {
        cout << pairs[i].Sum() << endl; // pairs라는 배열에 먼저 인덱싱을 하고 Sum()함수를 적용
        // 0
        // 11
        // 22
        // 33
        // 44
        // 55
        // 66
        // 77
        // 88
        // 99
    }

    return 0;
}

출처 : 홍정모 유튜브

0개의 댓글

관련 채용 정보