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++ 프로그래밍의 중요한 부분입니다. 앞으로 더 나은 프로그래머가 되기 위해 계속해서 연습해보세요!

읽어주셔서 감사합니다! 더 많은 정보가 필요하시면 언제든지 질문해 주세요. - mj

댓글

이 블로그의 인기 게시물

리눅스에서 SSH 설정하고 사용하는 법

011) Rocky Linux 9.5 설치 방법: 단계별 가이드와 설정 팁

삼바 서버 구성하기: 리눅스와 윈도우 간의 파일 공유 완벽 가이드