Menu
Coddy logo textTech

포인터와 배열

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 5번째.

C++에서 배열과 포인터는 특별한 관계를 가집니다. 배열을 선언할 때, 배열의 이름은 실제로 해당 배열의 첫 번째 요소를 가리키는 포인터 역할을 합니다. 이러한 연결을 통해 포인터를 사용하여 강력한 방식으로 배열을 다룰 수 있습니다.

다음 배열 선언을 살펴보겠습니다:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr은 이제 numbers[0]을 가리킵니다

여기서 numbers&numbers[0]와 동일합니다. 둘 다 첫 번째 요소의 주소를 제공합니다. 포인터 ptr은 이제 동일한 위치를 가리킵니다.

배열에 대한 포인터를 얻으면 포인터 연산을 사용하여 요소들을 탐색할 수 있습니다. 포인터에 1을 더하면 동일한 타입의 다음 요소로 이동합니다:

ptr++;        // 이제 numbers[1]을 가리킵니다
ptr = ptr + 2; // 이제 numbers[3]을 가리킵니다

어느 위치에서든 포인터를 역참조하여 값에 접근할 수 있습니다: *ptr은 현재 위치의 값을 제공하며, *(ptr + 1)은 다음 요소의 값을 제공합니다.

이러한 포인터-배열 관계를 통해 전통적인 인덱스 기반 루프 대신 포인터를 사용하여 배열을 순회할 수 있으며, 이는 배열 순회에 대한 대안적인 접근 방식을 제공합니다.

challenge icon

챌린지

쉬움

포인터를 사용하여 배열을 순회하고 각 요소를 출력하는 프로그램을 작성하여 포인터와 배열 간의 관계를 실습해 보세요.

다음과 같은 배열이 제공됩니다:

int values[6] = {15, 23, 8, 42, 17, 31};

프로그램은 다음을 수행해야 합니다:

  1. values 배열의 첫 번째 요소를 가리키는 ptr이라는 이름의 포인터를 생성합니다.
  2. 포인터 연산(pointer arithmetic)을 사용하여 배열의 모든 6개 요소를 순회합니다.
  3. 각 위치에서 포인터를 역참조(dereferencing)하여 각 요소를 출력합니다.
  4. 포인터 연산을 사용하여 포인터를 다음 요소로 이동시킵니다(포인터 증가).

각 요소를 다음 형식으로 별도의 줄에 출력하세요:

Element: [value]

출력은 배열 인덱싱이 아닌 포인터 역참조를 통해 액세스된 배열의 모든 6개 요소를 배열에 나타나는 순서대로 보여주어야 합니다.

치트 시트

배열 이름은 첫 번째 요소를 가리키는 포인터 역할을 합니다. 배열 이름을 포인터에 직접 할당할 수 있습니다:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr은 numbers[0]을 가리킵니다

포인터 산술을 사용하여 배열 요소를 탐색합니다:

ptr++;        // 다음 요소로 이동
ptr = ptr + 2; // 2개 요소 앞으로 이동

포인터를 역참조하여 값에 접근합니다:

*ptr          // 현재 요소 값
*(ptr + 1)    // 다음 요소 값

이를 통해 인덱스 기반 루프의 대안으로 포인터 기반 배열 순회가 가능해집니다.

직접 해보기

#include <iostream>
using namespace std;

int main() {
    // 주어진 배열
    int values[6] = {15, 23, 8, 42, 17, 31};
    
    // TODO: 배열의 첫 번째 요소를 가리키는 'ptr'이라는 이름의 포인터를 생성하세요
    
    // TODO: 포인터 연산을 사용하여 6개의 모든 요소를 반복하는 루프를 사용하세요
    // TODO: 포인터를 역참조하여 각 요소를 출력하세요
    // TODO: 포인터 연산을 사용하여 포인터를 다음 요소로 이동시키세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직과 흐름의 모든 레슨