구조체 집합 초기화 (aggregate initialization)
다음과 같은 조건을 충족하면 클래스나 구조체나 선언시에 값 매핑하여 생성할 수있다.
- 사용자 정의 생성자 없음
- private/protected 멤버 없음
- virtual 없음
- 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 알고리즘 사용 가능
'코딩 학습 > C와 C++' 카테고리의 다른 글
| 그리디 알고리즘 (0) | 2026.06.02 |
|---|---|
| TA 코스 2주차 과제 - 프로시저 셰이더 응용하기 (0) | 2026.04.20 |
| C++ 기초 - enum class, auto, default, delete, final, override, 람다 함수 (0) | 2026.04.10 |
| C++ 기초 - 템플릿 프로그래밍 (0) | 2026.04.08 |
| C++ 기초 - Casting, inline 키워드, static 키워드, 예외 처리 (1) | 2026.04.08 |