본문 바로가기
C++

[C++] 배열과 포인터 완벽 이해하기: 차이점과 사용법 🔍

by 다다면체 2025. 1. 6.
728x90
반응형

안녕하세요! 오늘은 C++의 핵심 개념인 배열과 포인터를 다뤄볼 거예요. 😊 배열과 포인터는 데이터 처리를 위한 중요한 도구로, 특히 메모리와 관련된 이해를 돕는 데 필수적이랍니다. 그럼 본격적으로 시작해볼까요? 🚀

반응형

1. 배열의 기초 다지기 📋

배열은 동일한 데이터 타입의 값을 연속적으로 저장할 수 있는 자료 구조예요. 선언부터 초기화, 접근 방법까지 하나씩 알아볼게요.

(1) 배열 선언

배열은 크기와 데이터 타입을 지정하여 선언합니다. 📌 예제

int numbers[5];

(2) 배열 초기화

배열을 선언과 동시에 초기화하거나, 나중에 값을 할당할 수 있어요. 📌 예제

int numbers[5] = {1, 2, 3, 4, 5};
char letters[] = {'A', 'B', 'C'}; // 크기 생략 가능

(3) 배열 요소 접근

배열의 각 요소는 0부터 시작하는 인덱스를 사용해 접근합니다. 📌 예제

std::cout << numbers[0] << std::endl; // 1 출력
numbers[2] = 10; // 3번째 요소 변경

2. 포인터의 기본 개념 이해하기 🛠️

포인터는 변수의 메모리 주소를 저장하는 특별한 변수입니다. C++에서 메모리 관리와 효율적인 데이터 처리를 위한 필수 도구예요.

(1) 포인터 선언

포인터는 데이터 타입 뒤에 *를 붙여 선언합니다. 📌 예제

int* ptr;

(2) 주소 연산자와 간접 참조 연산자

  • 주소 연산자(&): 변수의 메모리 주소를 가져옵니다.
  • 간접 참조 연산자(*): 포인터가 가리키는 주소의 값을 참조합니다. 📌 예제
int num = 10;
int* ptr = &num;
std::cout << "num의 값: " << *ptr << std::endl; // 10 출력

(3) 포인터 초기화

포인터는 선언 후 초기화되지 않은 상태에서 사용하면 위험합니다. 항상 유효한 주소를 할당하거나 nullptr로 초기화하세요. 📌 예제

int* ptr = nullptr;
if (ptr != nullptr) {
    // 안전하게 사용
}

3. 배열과 포인터의 관계 🔗

배열 이름은 포인터처럼 동작합니다. 즉, 배열 이름은 배열의 첫 번째 요소의 주소를 나타냅니다. 📌 예제

int numbers[3] = {1, 2, 3};
int* ptr = numbers;
std::cout << "첫 번째 요소: " << *ptr << std::endl; // 1 출력

(1) 배열과 포인터의 차이점

  • 배열은 고정 크기이지만, 포인터는 크기를 동적으로 변경할 수 있습니다.
  • 배열 이름은 상수 포인터로 간주되어 다른 주소를 가리킬 수 없어요. 📌 예제
int numbers[3] = {1, 2, 3};
int* ptr = numbers;
ptr++; // 가능
// numbers++ 불가능

(2) 포인터로 배열 순회

📌 예제

int numbers[3] = {1, 2, 3};
int* ptr = numbers;
for (int i = 0; i < 3; i++) {
    std::cout << *(ptr + i) << std::endl;
}

4. 배열과 포인터 활용 예제 💡

(1) 문자열 처리

C++에서는 char 배열과 포인터를 사용해 문자열을 처리할 수 있어요. 📌 예제

char str[] = "Hello";
char* ptr = str;
while (*ptr != '\0') {
    std::cout << *ptr;
    ptr++;
}
std::cout << std::endl;

(2) 동적 메모리 할당

포인터를 사용하면 배열의 크기를 런타임에 동적으로 결정할 수 있습니다. 📌 예제

int* numbers = new int[5];
for (int i = 0; i < 5; i++) {
    numbers[i] = i * 10;
}
for (int i = 0; i < 5; i++) {
    std::cout << numbers[i] << std::endl;
}
delete[] numbers; // 메모리 해제

5. 마무리 🎉

배열과 포인터는 C++ 프로그래밍의 핵심 개념으로, 데이터 처리와 메모리 관리를 더욱 효율적으로 만들어줍니다. 배열과 포인터의 관계를 이해하고 활용법을 익히면 더 강력한 코드를 작성할 수 있어요. 꾸준히 연습하며 자신만의 노하우를 쌓아보세요! 😊
포인터는 정말 중요한 내용이기 때문에 추후 필요하다면 따로 더 자세히 다뤄보도록 할게요!
🚀

728x90
반응형