[C++] 구조체 기본 개념

구조체란?

여러 개의 변수와 함수를 하나의 단위로 묶은 것

구조체란 데이터의 집합을 정의하는 사용자 정의 자료형이다. 여러개의 변수를 하나의 단위로 묶어서 다루게한다. 각각의 변수와 함수를 구조체의 멤버라고 한다. 클래스와 달리 구조체의 멤버는 public 접근제어를 기본으로 가진다.

struct MyStruct {
  int first;
  int second;

  int Sum() { return first + second; }
};

구조체를 선언 시 마지막에 세미콜론을 붙이는 것을 기억하자.

 

멤버

구조체의 멤버구조체 내에 정의 된 변수나 함수다. 구조체는 멤버를 여러 개 가질 수 있다. 구조체 멤버 변수는 구조체의 인스턴스가 다룰 값을 저장한다. 구조체 멤버함수는 구조체의 데이터를 처리하거나 특정 작업을 실행한다.

struct Person {
/* 멤버변수 */
    std::string name;
    int age;
    float height;
    
/* 멤버함수 */
    void introduce() {
        std::cout << "Name: " << name << ", Age: " << age << ", Height: " << height << std::endl;
    }
};

구조체 접근

구조체의 인스턴스에 접근연산자(`.`)를 통해 멤버에 접근할 수 있다.

Person person; // 구조체 인스턴스 선언

/* 접근연산자(.)를 통한 인스턴스의 멤버에 접근 */
person.name = "Alice";
person.age = 30;
person.height = 165.5;

person.introduce();  // 멤버 함수 호출

멤버연산자

  /* 구조체 인스턴스를 변수에 저장 */	
  MyStruct a;
  a.first = 123;
  a.second = 456;

  cout << sizeof(a) << endl; // 8

  /* 구조체 인스턴스의 주소를 포인터에 저장 */
  MyStruct *ptr_a = &a;

  cout << ptr_a->first << " " << ptr_a->second << " " << ptr_a->Sum() << endl;
  • 구조체가 자료형인 변수인 경우: 점연산자(.)
  • 구조체 자료형의 포인터 변수인 경우: 화살표 연산자(→)

구조체를 원소로 하는 배열

  // 구조체와 배열
  MyStruct pairs[10];

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

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

구조체를 원소로 하는 배열은 배열의 특성상 내부적으로 포인터다. 하지만 인덱싱을 통해 각각의 구조체 인스턴스에 접근할 때 인스턴스의 멤버에 접근하려면 화살표 대신에 점(.)으로 멤버에 접근한다.