포인터로서의 배열 이름
Coddy C 여정의 논리 & 흐름 섹션에 포함된 레슨. 63개 중 7번째.
C에서 array와 pointer는 C가 메모리의 data를 다루는 방식을 이해하는 데 기본이 되는 특별한 관계를 가집니다. array를 선언하면 array 이름 자체가 array의 first element를 가리키는 상수 pointer로 동작합니다.
즉, int numbers[5];와 같은 배열이 있을 때 numbers라는 이름은 본질적으로 항상 numbers[0]을 가리키는 포인터입니다. 배열 이름을 별도로 선언할 필요가 없는 내장 포인터라고 생각하면 됩니다.
int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0] // 이것들은 동일합니다!이 등가성은 매우 중요합니다. numbers와 &numbers[0]은 모두 정확히 동일한 메모리 주소를 제공합니다. 배열 이름은 주소 연산자를 사용하지 않고도 첫 번째 요소의 주소를 가리키는 더 편리한 방법일 뿐입니다.
이 관계를 이해하면 array에 pointer 기법을 사용하는 길이 열리며, 이를 통해 코드를 더 유연하고 효율적으로 만들 수 있습니다. 핵심적인 차이점은 일반적인 pointer와 달리 array 이름은 상수 pointer라는 것입니다. 즉, pointer가 가리키는 대상을 변경할 수 없습니다.
챌린지
쉬움array 이름과 첫 번째 element에 대한 pointer 사이의 동등성을 보여 주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.
- 4개의 element를 가진
numbers라는 integer array를 Declare하고 {10, 20, 30, 40} values로 initialize하세요. ptr라는 integer에 대한 pointer를 Declare하세요.- array 이름
numbers를 pointerptr에 Assign하세요. %pformat specifier와 함께printf를 사용하여numbers에 저장된 address를 Print하세요.%pformat specifier와 함께printf를 사용하여 첫 번째 element의 address인&numbers[0]을 Print하세요.%pformat specifier와 함께printf를 사용하여ptr에 저장된 address를 Print하세요.- array 이름을 사용하여 첫 번째 element의 값을 Print하세요:
*numbers - pointer를 사용하여 첫 번째 element의 값을 Print하세요:
*ptr
출력은 다음 형식으로 결과를 표시해야 합니다.
Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10이 challenge는 array 이름이 첫 번째 element에 대한 constant pointer로 동작하며, ptr이 array 이름에 Assign되었을 때 numbers, &numbers[0], ptr이 모두 동일한 memory address를 포함한다는 것을 보여 줍니다.
직접 해보기
#include <stdio.h>
int main() {
// TODO: 여기에 코드를 작성하세요
// 1. 배열 'numbers'를 {10, 20, 30, 40}으로 선언하고 초기화하세요
// 2. 'ptr'이라는 이름의 정수 포인터를 선언하세요
// 3. 배열 이름을 포인터에 할당하세요
// 4. 필요한 모든 주소와 값을 출력하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러