포인터로서의 배열 이름
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 7번째.
C 언어에서 배열과 포인터는 C가 메모리의 데이터를 처리하는 방식을 이해하는 데 필수적인 특별한 관계를 가집니다. 배열을 선언할 때, 배열 이름 자체는 배열의 첫 번째 요소를 가리키는 상수 포인터 역할을 합니다.
이는 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]은 모두 정확히 동일한 메모리 주소를 제공합니다. 배열 이름은 주소 연산자를 사용할 필요 없이 첫 번째 요소의 주소를 참조하는 더 편리한 방법일 뿐입니다.
이러한 관계를 이해하면 배열과 함께 포인터 기법을 사용하는 길을 열 수 있으며, 이는 코드를 더 유연하고 효율적으로 만들 수 있습니다. 일반 포인터와 달리 가장 큰 차이점은 배열 이름이 상수 포인터라는 것입니다. 즉, 배열 이름이 가리키는 대상을 변경할 수 없습니다.
챌린지
쉬움배열 이름과 첫 번째 요소에 대한 포인터 간의 동등성을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 4개의 요소를 가진
numbers라는 이름의int배열을Declare하고 {10, 20, 30, 40}values로initialize합니다. ptr이라는 이름의integer에 대한Pointer를Declare합니다.Array이름numbers를pointerptr에Assign합니다.%p형식 지정자를 사용하여printf로numbers에 저장된address를Print합니다.%p형식 지정자를 사용하여printf로Firstelement의address인&numbers[0]를Print합니다.%p형식 지정자를 사용하여printf로ptr에 저장된address를Print합니다.Array이름을 사용하여firstelement의Value를Print합니다:*numberspointer를 사용하여firstelement의Value를Print합니다:*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이 all 모두 동일한 메모리 address를 가진다는 것을 보여줍니다.
직접 해보기
#include <stdio.h>
int main() {
// TODO: 여기에 코드를 작성하세요
// 1. 배열 'numbers'를 {10, 20, 30, 40}으로 선언하고 초기화하세요
// 2. 'ptr'이라는 이름의 정수 포인터를 선언하세요
// 3. 배열 이름을 포인터에 할당하세요
// 4. 필요한 모든 주소와 값을 출력하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.