C++ 기초: 포인터와 메모리 관리
C++ 기초: 포인터와 메모리 관리
안녕하세요, mj입니다! 오늘은 C++에서 포인터와 메모리 관리에 대해 알아보겠습니다. 포인터는 C++ 프로그래밍에서 매우 중요한 개념으로, 프로그램의 메모리 사용을 효율적으로 관리할 수 있게 도와줍니다. 포인터를 이해하면 더 나은 성능과 유연성을 가진 코드를 작성할 수 있습니다.
포인터란 무엇인가?
포인터는 메모리 주소를 저장하는 변수입니다. 포인터를 사용하면 특정 데이터의 위치를 참조할 수 있으며, 이를 통해 메모리를 직접 조작할 수 있습니다. 기본적인 포인터의 선언은 다음과 같습니다:
int* ptr;
위의 예제에서 ptr는 정수형 변수를 가리키는 포인터입니다.
포인터의 사용 예시
예시 1: 포인터를 이용한 변수 값 변경
int main() {
int a = 10;
int* ptr = &a // a의 주소를 ptr에 저장
*ptr = 20; // 포인터를 통해 a의 값을 변경
std::cout << "a의 값: " << a << std::endl; // a의 값 출력
return 0;
}
출력 결과: a의 값: 20
예시 2: 동적 메모리 할당
int main() {
int* arr = new int[5]; // 정수형 배열 동적 할당
for (int i = 0; i < 5; ++i) {
arr[i] = i + 1; // 배열 초기화
}
for (int i = 0; i < 5; ++i) {
std::cout << arr[i] << " "; // 배열 값 출력
}
delete[] arr; // 동적 메모리 해제
return 0;
}
출력 결과: 1 2 3 4 5
예시 3: 포인터 배열
int main() {
int a = 1, b = 2, c = 3;
int* ptrArray[3] = {&a, &b, &c}; // 포인터 배열
for (int i = 0; i < 3; ++i) {
std::cout << *ptrArray[i] << " "; // 각 포인터가 가리키는 값 출력
}
return 0;
}
출력 결과: 1 2 3
예시 4: 포인터와 함수
void increment(int* num) {
(*num)++;
}
int main() {
int a = 5;
increment(&a); // a의 주소를 전달
std::cout << "a의 값: " << a << std::endl; // a의 값 출력
return 0;
}
출력 결과: a의 값: 6
예시 5: 이중 포인터
int main() {
int a = 10;
int* ptr = &a
int** ptr2 = &ptr // 이중 포인터
std::cout << "a의 값: " << **ptr2 << std::endl; // 이중 포인터를 통한 값 출력
return 0;
}
출력 결과: a의 값: 10
메모리 관리
C++에서는 동적 메모리를 할당할 수 있습니다. new 키워드를 사용하여 메모리를 할당하고, 사용이 끝나면 delete 키워드를 사용하여 메모리를 해제해야 합니다. 메모리를 해제하지 않으면 메모리 누수가 발생할 수 있습니다.
결론
오늘은 C++에서 포인터와 메모리 관리의 기초에 대해 알아보았습니다. 포인터를 이해하고 적절히 사용하는 것은 C++ 프로그래밍의 중요한 부분입니다. 앞으로 더 나은 프로그래머가 되기 위해 계속해서 연습해보세요!
댓글
댓글 쓰기