배열 요소와 포인터
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 언어 학습을 계속하면서 접하게 될 더 고급 포인터 기술에 대비할 수 있습니다.
챌린지
쉬움전통적인 배열 인덱싱 대신 포인터 표기법을 사용하여 배열 요소에 액세스하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 6개의 요소를 가진
values라는 이름의 정수 배열을 선언하고 {5, 15, 25, 35, 45, 55} 값으로 초기화합니다. - for 루프를 사용하여 배열의 모든 요소를 반복합니다.
- 루프 내부에서 각 요소에 액세스하기 위해 포인터 표기법
*(values + i)를 사용합니다 (values[i]와 같은 대괄호 표기법을 사용하지 마세요). - 포인터 표기법 액세스 방식을 사용하여 각 요소를 출력합니다.
- 루프가 끝난 후, 두 가지 방법을 모두 사용하여 세 번째 요소(인덱스 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) 사이의 동등성에 대한 이해를 테스트하며, 포인터 산술을 통해 전통적인 인덱싱 대신 메모리 주소 계산을 사용하여 배열 요소에 액세스하는 방법을 보여줍니다.
직접 해보기
#include <stdio.h>
int main() {
// TODO: 여기에 코드를 작성하세요
// 6개의 요소를 가진 배열 'values'를 선언하고 초기화합니다
// 포인터 표기법 *(values + i)를 사용하여 각 요소를 출력하는 for 루프를 사용합니다
// 루프가 끝난 후, 포인터 표기법과 배열 표기법을 모두 사용하여 세 번째 요소를 출력합니다
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.