Menu
Coddy logo textTech

배열 요소와 포인터

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 8번째.

이제 배열 이름이 포인터로 작동하는 방식을 이해했으므로, 이 지식을 사용하여 완전히 다른 방식으로 배열 요소에 접근할 수 있습니다. array[i]와 같은 익숙한 대괄호 표기법을 사용하는 대신, 포인터 표기법을 사용하여 동일한 결과를 얻을 수 있습니다.

핵심적인 통찰은 array[i]*(array + i)와 완전히 동일하다는 점입니다. array + i라고 작성할 때, 여러분은 C에게 배열의 시작 부분에서 i 위치만큼 앞으로 이동하라고 지시하는 것입니다. 그런 다음 역참조 연산자 *가 해당 위치의 값을 가져옵니다.

int numbers[5] = {10, 20, 30, 40, 50};
// 이 두 줄은 정확히 동일한 동작을 합니다:
printf("%d", numbers[2]);    // 30을 출력합니다
printf("%d", *(numbers + 2)); // 마찬가지로 30을 출력합니다

이 포인터 표기법은 C가 데이터 타입 크기를 기반으로 올바른 메모리 주소를 자동으로 계산하기 때문에 작동합니다. 정수형 배열 포인터에 2를 더하면, C는 2 × sizeof(int) 바이트만큼 앞으로 이동하여 정확히 세 번째 요소에 도달합니다.

이러한 등가성을 이해하면 배열을 다루는 방식에 유연성을 얻을 수 있으며, C 언어 학습을 계속하면서 접하게 될 더 고급 포인터 기술에 대비할 수 있습니다.

challenge icon

챌린지

쉬움

전통적인 배열 인덱싱 대신 포인터 표기법을 사용하여 배열 요소에 액세스하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 6개의 요소를 가진 values라는 이름의 정수 배열을 선언하고 {5, 15, 25, 35, 45, 55} 값으로 초기화합니다.
  2. for 루프를 사용하여 배열의 모든 요소를 반복합니다.
  3. 루프 내부에서 각 요소에 액세스하기 위해 포인터 표기법 *(values + i)를 사용합니다 (values[i]와 같은 대괄호 표기법을 사용하지 마세요).
  4. 포인터 표기법 액세스 방식을 사용하여 각 요소를 출력합니다.
  5. 루프가 끝난 후, 두 가지 방법을 모두 사용하여 세 번째 요소(인덱스 2)를 출력함으로써 동등함을 증명합니다:
    • 먼저 포인터 표기법 사용: *(values + 2)
    • 그 다음 전통적인 배열 표기법 사용: values[2]

출력 결과는 다음과 같은 형식으로 표시되어야 합니다:

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

이 챌린지는 array[i]*(array + i) 사이의 동등성에 대한 이해를 테스트하며, 포인터 산술을 통해 전통적인 인덱싱 대신 메모리 주소 계산을 사용하여 배열 요소에 액세스하는 방법을 보여줍니다.

치트 시트

배열 요소는 대괄호 표기법 대신 포인터 표기법을 사용하여 접근할 수 있습니다. 표현식 array[i]*(array + i)와 동일합니다.

array + i를 작성할 때, C는 배열의 시작 부분에서 i 위치만큼 앞으로 이동합니다. 역참조 연산자 *는 해당 위치의 값을 가져옵니다.

int numbers[5] = {10, 20, 30, 40, 50};
// 이 두 줄은 정확히 같은 작업을 수행합니다:
printf("%d", numbers[2]);    // 30을 출력합니다
printf("%d", *(numbers + 2)); // 역시 30을 출력합니다

C는 데이터 타입 크기에 따라 올바른 메모리 주소를 자동으로 계산합니다. 정수 배열 포인터에 2를 더하면 2 × sizeof(int) 바이트만큼 앞으로 이동합니다.

직접 해보기

#include <stdio.h>

int main() {
    // TODO: 여기에 코드를 작성하세요
    // 6개의 요소를 가진 배열 'values'를 선언하고 초기화합니다
    // 포인터 표기법 *(values + i)를 사용하여 각 요소를 출력하는 for 루프를 사용합니다
    // 루프가 끝난 후, 포인터 표기법과 배열 표기법을 모두 사용하여 세 번째 요소를 출력합니다
    
    return 0;
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨