Menu
Coddy logo textTech

포인터로서의 배열 이름

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

C 언어에서 배열과 포인터는 특별한 관계를 가지고 있으며, 이는 C가 메모리에서 데이터를 처리하는 방식을 이해하는 데 필수적입니다. 배열을 선언할 때, 배열 이름 그 자체가 배열의 첫 번째 요소를 가리키는 상수 포인터처럼 동작합니다.

이는 int numbers[5];와 같은 배열이 있을 때, numbers라는 이름이 본질적으로 항상 numbers[0]를 가리키는 포인터라는 것을 의미합니다. 배열 이름을 별도로 선언할 필요가 없는 내장 포인터라고 생각할 수 있습니다.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers'는 첫 번째 요소를 가리킵니다
// numbers == &numbers[0]  // 이들은 동일합니다!

이러한 동등성은 매우 중요합니다: numbers&numbers[0]은 둘 다 정확히 동일한 메모리 주소를 제공합니다. 배열 이름은 주소 연산자(address-of operator)를 사용할 필요 없이 첫 번째 요소의 주소를 참조하는 더 편리한 방법일 뿐입니다.

이러한 관계를 이해하면 배열과 함께 포인터 기술을 사용할 수 있는 길이 열리며, 이는 코드를 더욱 유연하고 효율적으로 만들 수 있습니다. 주요 차이점은 일반 포인터와 달리 배열 이름은 상수 포인터(constant pointers)라는 점입니다. 즉, 배열 이름이 가리키는 대상을 변경할 수 없습니다.

challenge icon

챌린지

쉬움

배열 이름과 첫 번째 요소를 가리키는 포인터 사이의 동등성을 증명하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 4개의 요소를 가진 numbers라는 이름의 정수 배열을 선언하고 {10, 20, 30, 40} 값으로 초기화합니다.
  2. ptr이라는 이름의 정수 포인터를 선언합니다.
  3. 배열 이름 numbers를 포인터 ptr에 할당합니다.
  4. printf%p 형식 지정자를 사용하여 numbers에 저장된 주소를 출력합니다.
  5. printf%p 형식 지정자를 사용하여 첫 번째 요소의 주소 &numbers[0]를 출력합니다.
  6. printf%p 형식 지정자를 사용하여 ptr에 저장된 주소를 출력합니다.
  7. 배열 이름을 사용하여 첫 번째 요소의 값을 출력합니다: *numbers
  8. 포인터를 사용하여 첫 번째 요소의 값을 출력합니다: *ptr

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

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

이 챌린지는 배열 이름이 첫 번째 요소를 가리키는 상수 포인터 역할을 하며, ptr에 배열 이름이 할당되었을 때 numbers, &numbers[0], 그리고 ptr이 모두 동일한 메모리 주소를 포함한다는 것을 보여줍니다.

치트 시트

C 언어에서 배열 이름은 배열의 첫 번째 요소를 가리키는 상수 포인터처럼 동작합니다.

배열을 선언하면, 배열 이름은 첫 번째 요소를 가리킵니다:

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers'는 첫 번째 요소를 가리킵니다
// numbers == &numbers[0]  // 이들은 동일합니다!

배열 이름을 포인터에 할당할 수 있습니다:

int *ptr;
ptr = numbers;  // ptr은 이제 첫 번째 요소를 가리킵니다

포인터 표기법을 사용하여 값에 접근하기:

*numbers  // 배열 이름을 통한 첫 번째 요소의 값
*ptr      // 포인터를 통한 첫 번째 요소의 값

주요 차이점: 배열 이름은 상수 포인터입니다. 일반 포인터와 달리 가리키는 대상을 변경할 수 없습니다.

직접 해보기

#include <stdio.h>

int main() {
    // TODO: 여기에 코드를 작성하세요
    // 1. {10, 20, 30, 40}으로 'numbers' 배열을 선언하고 초기화합니다
    // 2. 'ptr'이라는 이름의 정수형 포인터를 선언합니다
    // 3. 배열 이름을 포인터에 할당합니다
    // 4. 필요한 모든 주소와 값을 출력합니다
    
    return 0;
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨