C++ 초급 - 6. 배열과 문자열 (1 - 배열 (int arr[5];))

2025. 2. 12. 19:26프로그래밍 언어/C++

📌 6. 배열과 문자열

C++에서 배열(Array)과 문자열(String)은 데이터를 효율적으로 저장하고 처리하는 중요한 자료구조이다.
기본적인 배열과 다차원 배열, C-스타일 문자열, C++ 표준 라이브러리의 std::vector 및 std::string을 학습한다.


📌 6.1 배열 (int arr[5];)

배열(Array)같은 데이터 타입을 연속된 메모리 공간에 저장하는 자료구조이다.
C++에서는 정적 배열(int arr[5];)과 동적 배열(new int[5];)을 사용할 수 있다.
배열은 빠른 데이터 접근이 가능하지만, 크기가 고정되며, 관리가 어렵다는 단점이 있다.


📌 1. 배열 선언 및 초기화

배열을 선언할 때는 데이터 타입과 크기를 지정해야 한다.

💡 배열 선언 문법

데이터타입 배열이름[배열크기];

💡 예제: 배열 선언 및 초기화

#include <iostream>

int main() {
    int arr1[5];  // 선언만 하고 초기화하지 않음 (쓰레기 값 저장됨)
    int arr2[5] = {1, 2, 3, 4, 5};  // 초기화된 배열
    int arr3[] = {10, 20, 30};  // 크기 자동 결정 (3개)

    std::cout << "arr2의 첫 번째 요소: " << arr2[0] << std::endl;
    std::cout << "arr3의 크기: " << sizeof(arr3) / sizeof(arr3[0]) << std::endl;

    return 0;
}

🔹 출력 결과

arr2의 첫 번째 요소: 1
arr3의 크기: 3

💡 설명

  • int arr1[5]; → 선언만 했으므로 초기값이 불확실(쓰레기 값 저장).
  • int arr2[5] = {1, 2, 3, 4, 5}; → 명시적으로 초기화.
  • int arr3[] = {10, 20, 30}; → 크기를 자동으로 결정(sizeof(arr3) / sizeof(arr3[0]) 활용).

📌 2. 배열의 요소 접근 및 수정

배열 요소는 0부터 시작하는 인덱스(Index)를 사용하여 접근 가능하다.

💡 배열 요소 접근 문법

배열이름[인덱스] = 값;

💡 예제: 배열 요소 접근 및 수정

#include <iostream>

int main() {
    int arr[3] = {10, 20, 30};

    std::cout << "초기 배열 값: " << arr[1] << std::endl;  // 20

    arr[1] = 50;  // 배열 요소 수정

    std::cout << "수정 후 배열 값: " << arr[1] << std::endl;  // 50

    return 0;
}

🔹 출력 결과

초기 배열 값: 20
수정 후 배열 값: 50

💡 설명

  • arr[1] = 50; → 배열의 두 번째 요소를 변경.
  • 배열의 크기를 초과하는 인덱스를 접근하면 오류 발생 가능(arr[3] → 잘못된 접근).

📌 3. 배열 크기 및 반복문을 이용한 순회

배열을 다룰 때는 for 반복문을 사용하여 요소를 순회하는 것이 일반적이다.

💡 배열 크기 구하기

int 크기 = sizeof(배열이름) / sizeof(배열이름[0]);

💡 예제: 배열 순회

#include <iostream>

int main() {
    int arr[] = {5, 10, 15, 20, 25};
    int size = sizeof(arr) / sizeof(arr[0]);  // 배열 크기 계산

    std::cout << "배열 요소 출력: ";
    for (int i = 0; i < size; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

🔹 출력 결과

배열 요소 출력: 5 10 15 20 25

💡 설명

  • sizeof(arr) / sizeof(arr[0]) → 배열 전체 크기를 요소 크기로 나눠 배열 크기를 구함.
  • for 문을 사용하여 배열의 모든 요소를 순차적으로 접근.

📌 4. 배열과 포인터의 관계

배열 이름 자체가 첫 번째 요소의 메모리 주소를 의미하므로, 포인터처럼 활용 가능하다.

💡 배열과 포인터의 관계

배열이름 == &배열이름[0]  // 배열 이름은 첫 번째 요소의 주소와 동일

💡 예제: 포인터를 이용한 배열 접근

#include <iostream>

int main() {
    int arr[] = {10, 20, 30};
    int* ptr = arr;  // 배열 이름은 첫 번째 요소의 주소

    std::cout << "포인터로 접근: " << *ptr << std::endl;  // 10
    std::cout << "포인터로 다음 요소 접근: " << *(ptr + 1) << std::endl;  // 20

    return 0;
}

🔹 출력 결과

포인터로 접근: 10
포인터로 다음 요소 접근: 20

💡 설명

  • int* ptr = arr; → arr 자체가 첫 번째 요소의 주소이므로 ptr에 할당 가능.
  • *(ptr + 1) → 포인터 연산을 통해 다음 요소로 이동 가능.

📌 5. 정리

개념  설명
배열 선언 int arr[5];
배열 초기화 {1, 2, 3} 또는 int arr[3] = {10, 20, 30};
배열 요소 접근 arr[0] 사용하여 첫 번째 요소 접근
배열 크기 구하기 sizeof(arr) / sizeof(arr[0])
배열 순회 for 문을 사용하여 순회 (for (int i = 0; i < size; i++))
배열과 포인터 관계 arr == &arr[0], *(arr + 1)으로 요소 접근 가능