Value of Life

C++ 포인터 완전 정복!! 포인터 정의와 선언, 활용법 본문

IT

C++ 포인터 완전 정복!! 포인터 정의와 선언, 활용법

앵글메이커 2024. 2. 4. 23:35
반응형

프로그래밍을 배우고 코딩을 하다보면 포인터라는 놈이 어렵게 느껴 질때가 많죠~

포인터의 기본 개념에 대해서 알아보고 하나씩 정복 해 나가 봅시다.
우선 포인터는 메모리 주소를 저장하고 참조하기 위한 변수로, C++의 강력한 기능 중 하나입니다. 포인터를 사용하면 메모리를 효율적으로 활용하고 다양한 작업을 수행할 수 있습니다.

1. 포인터의 정의와 선언
포인터는 특정 데이터 타입을 가리키는 주소를 저장하는 변수입니다. 아래는 정수형 변수를 가리키는 포인터의 정의와 선언 방법입니다.

```cpp
int main() {
    int number = 10;  // 정수형 변수 선언 및 초기화
    int *ptr;         // 포인터 선언 (*는 포인터를 나타냄)
    ptr = &number;    // 포인터에 변수의 주소 할당
    return 0;
}
```

1.2  포인터의 간접 참조
포인터를 통해 해당 주소에 접근하려면 간접 참조 연산자 `*`를 사용합니다.

```cpp
int main() {
    int number = 10;
    int *ptr;
    ptr = &number;
    // 포인터를 통한 변수 값 변경
    *ptr = 20;
    return 0;
}
```
위의 예제에서 `*ptr = 20;`는 포인터를 통해 변수 `number`의 값을 20으로 변경합니다.

간단한 예제를 통해서 기본 개념을 익히고 나면 포인터의 활용이 더욱 다양해집니다. 계속해서 다양한 활용법을 예제와 함께 살펴보겠습니다.

2.  포인터의 다양한 활용

포인터는 다양한 상황에서 유용하게 활용됩니다. 배열과의 관계, 함수의 인자 전달 방식 등을 이해하면 프로그래밍에서 더욱 효과적으로 활용할 수 있습니다.

2.1 배열과 포인터의 관계
배열은 포인터와 매우 밀접한 관련이 있습니다. 배열은 첫 번째 요소의 주소를 나타내는 포인터로 해석됩니다.

```cpp
int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr;
    ptr = arr;  // 배열의 이름은 첫 번째 요소의 주소로 해석됨

    // 포인터를 통한 배열 요소 접근
    for (int i = 0; i < 5; ++i) {
        cout << "Element " << i + 1 << ": " << *(ptr + i) << endl;
    }
    return 0;
}
```

2.2 포인터와 함수의 인자 전달
포인터를 사용하여 함수에 값을 전달하면 함수 내에서 해당 값을 변경할 수 있습니다.

```cpp
void modifyValue(int *ptr) {
    *ptr = 100;  // 포인터를 통해 값 변경
}

int main() {
    int number = 50;
    int *ptr = &number;

    cout << "Before: " << number << endl;

    modifyValue(ptr);

    cout << "After: " << number << endl;

    return 0;
}
```

함수 `modifyValue`는 포인터를 통해 전달된 변수의 값을 변경하므로 `number`의 값도 변경됩니다.

이처럼 포인터는 배열과 함수와의 조합으로 다양한 작업을 할 수 있습니다. 계속해서 동적 메모리 할당과의 관계 등을 예제와 함께 살펴보겠습니다.

3. 동적 메모리 할당의 필요성

동적 메모리 할당은 프로그램 실행 중에 필요한 메모리 공간을 할당하고 해제하는 프로세스를 의미합니다. 정적 할당과 달리 동적 할당은 실행 중에 메모리를 유연하게 조작할 수 있어 더 많은 자유도를 제공합니다.

3.1 동적 할당의 기본 원리
동적 메모리 할당은 `new` 연산자를 사용하여 특정 데이터 타입의 메모리 공간을 할당합니다.

```cpp
int *ptr = new int;  // int 형 변수를 위한 동적 메모리 할당
```

3.2 할당된 메모리의 활용
할당된 메모리는 포인터를 통해 접근하며 사용합니다.

```cpp
*ptr = 42;  // 동적으로 할당된 메모리에 값 저장
cout << "Dynamic Memory Value: " << *ptr << endl;
```

3.3 동적 할당과 정적 할당의 차이
동적 할당은 실행 중에 메모리를 할당하므로 유연성이 높지만, 사용 후에는 반드시 해제되어야 합니다.

```cpp
delete ptr;  // 동적으로 할당한 메모리 해제
```

3.4 메모리 부족 상황에서의 중요성
동적 할당은 실행 중에 메모리를 할당하므로 프로그램이 실행되는 동안 필요한 메모리를 동적으로 조절할 수 있습니다. 특히 큰 데이터나 유동적인 상황에서 메모리 부족을 방지하는 데 도움이 됩니다.

이렇게 동적 메모리 할당을 이해하고 활용하면 프로그램이 보다 효율적으로 메모리를 활용할 수 있습니다. 다음으로 메모리에 대해서 알아 볼까요?

 

[IT] - 프로그래밍 이야기) 메모리: 간단하게 알아보기

 

프로그래밍 이야기) 메모리: 간단하게 알아보기

1. 메모리의 정의 - 정의: 메모리는 컴퓨터가 데이터를 저장하고 처리하는 공간으로, 일종의 작은 저장소입니다. - 역할: 프로그램 실행, 데이터 보관, 임시 작업 등에 사용됩니다. 2. 메모리의 종

ymf21c.tistory.com

 

[IT] - 스택 영역과 힙 영역의 구분과 활용!!

 

스택 영역과 힙 영역의 구분과 활용!!

1. 스택 영역(Stack) - 구분: 함수 호출 시 지역 변수 및 함수 관련 정보 저장. - 특징: 후입선출(LIFO) 구조로 동작. - 활용: 작은 크기의 데이터, 임시 데이터, 지역 변수 등을 저장. 2. 힙 영역(Heap) - **

ymf21c.tistory.com

 

반응형