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)으로 요소 접근 가능 |