반도체/C++

36. C++에서 배열과 포인터 관계

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

1. 배열 이름과 포인터

  • 배열 이름: 배열의 이름은 배열의 첫 번째 요소의 주소를 나타냅니다. 예를 들어, arr이라는 배열이 있을 때, arr은 &arr[0]와 같으며, 이는 배열의 첫 번째 요소의 주소입니다.
int arr[3] = {10, 20, 30};
std::cout << "배열의 첫 번째 요소의 주소: " << &arr[0] << std::endl; // arr와 &arr[0]는 동일
std::cout << "배열 이름: " << arr << std::endl; // arr는 첫 번째 요소의 주소를 나타냄

2. 포인터와 배열의 사용

  • 포인터를 이용한 배열 접근: 포인터를 사용하여 배열의 요소에 접근할 수 있습니다. 배열의 이름을 포인터처럼 사용할 수 있어, 포인터 연산을 통해 배열 요소에 쉽게 접근할 수 있습니다.
#include <iostream>

int main() {
    int arr[3] = {10, 20, 30};
    int* ptr = arr; // 배열 이름을 포인터에 저장

    for (int i = 0; i < 3; ++i) {
        std::cout << "arr[" << i << "] = " << *(ptr + i) << std::endl; // 포인터 연산을 통해 접근
    }

    return 0;
}

3. 배열과 포인터의 메모리 구조

  • 연속적인 메모리: 배열의 요소는 연속적인 메모리 공간에 저장됩니다. 포인터는 이러한 연속적인 메모리 주소를 탐색하는 데 매우 유용합니다.
  • 포인터 산술: 포인터는 산술 연산을 지원합니다. 예를 들어, ptr + 1은 ptr이 가리키는 주소에서 다음 요소의 주소로 이동합니다. 이는 배열의 요소를 탐색하는 것과 동일하게 작동합니다.

4. 함수 인자로 배열 전달

  • 배열을 포인터로 전달: C++에서 배열을 함수의 인자로 전달할 때, 배열 이름은 포인터로 변환됩니다. 즉, 배열을 함수에 전달하면 배열의 첫 번째 요소의 주소가 전달됩니다.
#include <iostream>

// 배열을 포인터로 받아들이는 함수
void printArray(int* arr, int size) {
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " "; // 포인터를 통해 배열 요소 접근
    }
    std::cout << std::endl;
}

int main() {
    int arr[3] = {10, 20, 30};
    printArray(arr, 3); // 배열 이름을 전달

    return 0;
}

5. 포인터와 2차원 배열

  • 2차원 배열: 2차원 배열은 배열의 배열로 생각할 수 있으며, 포인터를 사용하여 접근할 수 있습니다. 2차원 배열의 첫 번째 요소는 포인터로 표현할 수 있습니다.
#include <iostream>

int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int (*ptr)[3] = arr; // 2차원 배열을 가리키는 포인터

    for (int i = 0; i < 2; ++i) {
        for (int j = 0; j < 3; ++j) {
            std::cout << ptr[i][j] << " "; // 포인터를 통해 2차원 배열 접근
        }
        std::cout << std::endl;
    }

    return 0;
}

결론

C++에서 포인터와 배열은 매우 밀접하게 연결되어 있으며, 배열의 이름은 포인터로 사용될 수 있습니다. 포인터를 사용하면 배열의 요소에 직접 접근하고 조작할 수 있으며, 함수에 배열을 전달할 때 유용하게 활용

728x90

'반도체 > C++' 카테고리의 다른 글

38. C++ 화살표 연산자  (0) 2024.09.04
35. C++에서의 포인터 개념  (0) 2024.09.03
34.1 사원 관리 프로그램 추가 C++  (0) 2024.09.03
34. 사원관리 프로그램 C++  (0) 2024.09.03
33. C++의 GET & SET  (1) 2024.09.03