티스토리 뷰
🟩 오늘의 목표
- 메모리 구조와 메모리 주소 개념을 이해한다.
- 포인터와 배열의 관계를 정확히 설명할 수 있다.
- 참조자의 개념과 포인터와의 차이를 구분한다.
- Call by Value / Reference / Address 차이를 코드 흐름으로 이해한다.
- 포인터·참조자 관련 문제를 손으로 추적하며 풀 수 있다.
🟧 알고리즘 특강 - 2 핵심 정리
🟦 메모리와 변수의 관계
- 메모리는 연속된 저장 공간이며, 각 칸은 고유한 메모리 주소를 가진다.
- 변수를 선언한다는 것은:
- 메모리 공간을 확보하고
- 해당 주소에 값을 저장한 뒤
- 변수 이름으로 그 주소를 간접 참조하는 것
int val = 7;
- val은 값 자체가 아니라 특정 메모리 주소에 붙은 이름표이다.
🟦 포인터의 개념
- 포인터는 값이 아니라 주소를 저장하는 변수이다.
int val = 7;
int* p_val = &val;
- p_val → 주소
- *p_val → 해당 주소에 저장된 실제 값
포인터 산술 연산은 타입 크기 단위로 이동한다.
- int* → 4바이트 단위
- double* → 8바이트 단위
주의사항 : 잘못된 형변환은 메모리 참조 오류를 유발할 수 있다.
🟦 배열과 포인터의 관계
- 배열 이름은 첫 번째 원소를 가리키는 상수 포인터처럼 동작한다.
int arr[5] = {1,2,3,4,5};
int* ptr = arr; // &arr[0]
- 아래 두 표현은 동일하다.
arr[i] == *(arr + i)
- 함수에 배열을 전달하면 포인터로 전달된다.
- 배열 크기는 반드시 별도로 전달해야 한다.
🟦 동적 배열과 포인터
- 실행 시간에 크기를 결정해야 할 때는 힙 메모리 사용
int size;
cin >> size;
int* arr = new int[size];
- 사용 후 반드시 delete[] 필요
- 실수 방지를 위해 std::vector 권장
🟧 참조자 (Reference)
🟦 참조자의 개념
- 참조자는 기존 변수에 대한 별칭
int val = 7;
int& ref = val;
- ref와 val은 완전히 동일한 메모리를 사용
참조자 :
- 반드시 초기화 필요
- 한 번 참조 대상이 정해지면 변경 불가
- null 개념 없음
🟦 포인터 vs 참조자 (내가 궁금했던 비교)
| 구분 | 포인터 | 참조자 |
| null 가능 | O | X |
| 대상 변경 | 가능 | 불가능 |
| 문법 | 간접 참조 필요 | 직접 사용 |
| 안정성 | 낮을 수 있음 | 상대적으로 높음 |
🟦 함수 매개변수에서의 활용
void increase(int& x) { x += 10; }
void increase2(int x) { x += 10; }
- 참조자 → 원본 변경 (Call by Reference)
- 값 복사 → 원본 유지 (Call by Value)
동적 메모리 관리가 필요 없다면 참조자를 우선 고려
🟧 오늘 풀어본 문제 정리
🟦 문제 1 (포인터 산술)
int arr[] = {10, 20, 30, 40, 50};
int* ptr = arr;
ptr += 2;
ptr[1] = *ptr + 10;
- ptr → arr[2] (30)
- *ptr = 30
- ptr[1] → arr[3]
- arr[3] = 30 + 10 = 40
최종 arr :
{10, 20, 30, 40, 50}
(기존 값과 동일하지만 계산 흐름이 핵심)
🟦 문제 2 (참조자 + 포인터 혼합)
void foo(int& x, int* y) {
x = *y;
*y = 30;
y = &x;
*y = 40;
}
int a = 10;
int b = 20;
foo(a, &b);
- x → a, y → &b
- a = b → a = 20
- b = 30
- y = &a
- a = 40
최종 결과 :
- a = 40
- b = 30
🟫 오늘 느낀 점
포인터·참조자는 문법보다 메모리 흐름을 손으로 따라가는 연습이 훨씬 중요하다는 걸 확실히 느꼈다.
'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글
| TIL - 14일차 (0) | 2025.12.17 |
|---|---|
| TIL - 13일차 (0) | 2025.12.16 |
| TIL - 11일차 (1) | 2025.12.11 |
| TIL - 10일차 (0) | 2025.12.10 |
| TIL - 9일차 (0) | 2025.12.09 |

