코딩 학습/C와 C++

C++ 기초 - 구조체 집합 초기화, 포인터 매개변수, 연속 선언, array

이개 2026. 4. 10. 19:45

구조체 집합 초기화 (aggregate initialization)

다음과 같은 조건을 충족하면 클래스나 구조체나 선언시에 값 매핑하여 생성할 수있다.

 

  1. 사용자 정의 생성자 없음
  2. private/protected 멤버 없음
  3. virtual 없음
  4. base class 없음 (C++ 버전에 따라 완화됨)
struct Point {
    int x;
    int y;
};


Point a = {1, 2};

이는 기본적으로 선언된 순서대로 매핑됨

 

 

포인터 매개변수

포인터를 매개 변수로 받을 때는 포인터가 복사된다.

void func(Point* p) {  // 포인터를 값으로 받음 → 복사!
    p->x = 99;         // 복사본 p로 원본 a.x 수정 → 영향 O
    p = nullptr;       // 복사본 p만 nullptr → 영향 X
}

Point a = {1, 2};
func(&a);
// a.x = 99 (p->x = 99로 수정됨)
// &a = 그대로 (p = nullptr은 복사본만 변경)

 

p = nullptr;  // 복사본 p가 nullptr이 됨
              // 하지만 func가 종료되면서 복사본 p는 소멸
              // nullptr을 역참조하는 코드가 없음!

// 런타임 에러가 나려면:
p = nullptr;
p->x = 99;  // ← 이래야 nullptr 역참조 → 런타임 에러

 

 

연속 선언

기본 연속 선언

int a, b, c; // 가능
struct Point {
    int x, y;
};

Point p1, p2, p3; // 구조체도 가능

초기화를 동반한 연속 선언

int a = 1, b = 2, c = 3; // 가능

 

헷갈리는 케이스 - 포인터

int* a, b;

a는 포인터고, b는 포인터가 아닌 int.

// 이것과 같음

int* a;
int b;

 

헷갈리는 케이스 - const

const int a = 1, b = 2; // 둘 다 const int

 

 

array

C++의 array는 크기가 고정된 배열을 감싸는 컨테이너

std::array<int, 3> arr; // 크기가 3으로 고정된 int 배열

 

장점:

  • .size() 있음
  • 복사 가능
  • STL 알고리즘 사용 가능