카테고리 없음

37. C++ 포인터와 배열을 사용한 함수 인자 전달의 장점

Clair_de_Lune 2024. 9. 3. 15:12
728x90

1. 메모리 효율성

  • 복사 비용 절감: 배열을 함수에 전달할 때, 배열의 모든 요소를 복사하는 대신 배열의 첫 번째 요소의 주소(포인터)를 전달합니다. 이는 메모리 사용량을 줄이고, 큰 배열을 다룰 때 성능을 크게 향상시킵니다.

2. 원본 데이터 수정 가능

  • 원본 데이터 접근: 포인터를 사용하여 함수 내에서 배열의 요소를 직접 수정할 수 있습니다. 이를 통해 함수가 호출된 후에도 변경된 값을 유지할 수 있습니다.
#include <iostream>

void modifyArray(int* arr, int size) {
    for (int i = 0; i < size; ++i) {
        arr[i] += 10; // 원본 배열의 요소를 변경
    }
}

int main() {
    int arr[3] = {1, 2, 3};
    modifyArray(arr, 3); // 배열의 주소를 전달

    for (int i = 0; i < 3; ++i) {
        std::cout << arr[i] << " "; // 11, 12, 13 출력
    }

    return 0;
}

3. 다양한 데이터 구조 처리

  • 다양한 크기와 형태의 배열 처리: 포인터를 사용하면 크기가 정해지지 않은 배열, 동적 할당된 배열, 2차원 배열 등 다양한 형태의 데이터를 처리할 수 있습니다. 이는 함수의 유연성을 높입니다.

4. 동적 메모리 관리

  • 동적 할당 배열 사용: 포인터를 사용하여 동적으로 메모리를 할당받은 배열을 함수에 전달할 수 있습니다. 이는 런타임 시 배열의 크기를 결정할 수 있게 해주며, 메모리 관리의 유연성을 제공합니다.
#include <iostream>

void createArray(int** arr, int size) {
    *arr = new int[size]; // 동적 배열 할당
    for (int i = 0; i < size; ++i) {
        (*arr)[i] = i + 1; // 값 초기화
    }
}

int main() {
    int* arr = nullptr;
    createArray(&arr, 5); // 배열의 주소를 전달

    for (int i = 0; i < 5; ++i) {
        std::cout << arr[i] << " "; // 1, 2, 3, 4, 5 출력
    }

    delete[] arr; // 동적 할당한 메모리 해제

    return 0;
}

5. 함수 시그니처 간결화

  • 간결한 함수 시그니처: 배열을 포인터로 전달하면 함수 시그니처가 간결해지며, 필요에 따라 배열의 크기를 추가 인자로 전달할 수 있습니다. 이는 코드의 가독성을 높여줍니다.

6. 다양한 데이터 타입 지원

  • 템플릿 사용: 포인터를 이용하면 다양한 데이터 타입의 배열을 처리할 수 있는 템플릿 함수를 작성하는 것이 용이합니다. 이는 코드 재사용성을 높입니다.
#include <iostream>

template <typename T>
void printArray(T* arr, int size) {
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int arrInt[3] = {1, 2, 3};
    double arrDouble[3] = {1.1, 2.2, 3.3};

    printArray(arrInt, 3); // 1 2 3
    printArray(arrDouble, 3); // 1.1 2.2 3.3

    return 0;
}

결론

C++에서 포인터와 배열을 사용한 함수 인자 전달은 메모리 효율성을 높이고, 데이터 수정이 가능하며, 다양한 데이터 구조를 처리할 수 있는 유연성을 제공합니다. 이러한 특성들은 C++의 강력한 메모리 관리 및 데이터 처리 능력을 활용하는 데 큰 장점

728x90