문법 · C · beginner

포인터 감각: 주소·배열·decay

배열이 함수로 넘어갈 때 일어나는 일과 * & 의 최소 의미.

배우기 · C 실험 기초 · 16분 · 3/6 · c · 포인터

이 트랙 목차 (6)
  1. 1. C 실험: main과 입출력 감각
  2. 2. C 타입·배열·반복
  3. 3. 포인터 감각: 주소·배열·decay
  4. 4. C 문자열: null 종료와 길이
  5. 5. 구조체 맛보기: 묶음과 배열
  6. 6. 반복과 간단한 입출력

실험장의 범위

/playground/c/는 브라우저 Wasmer Clang 실험입니다.
여기서는 채점 문제보다 문법 감각이 목표입니다.

주소와 역참조

int x = 3;
int *p = &x;  // p는 x의 주소
*p = 7;       // x가 7이 됨

&는 주소, *(선언)는 포인터 타입, *(식)는 역참조입니다. 같은 기호가 맥락에 따라 다릅니다.

배열과 포인터

int a[3] = {1, 2, 3};
int *p = a;      // &a[0]
printf("%d\n", p[1]); // 2

함수 인자로 int a[]를 받으면 포인터로 decay합니다. sizeof(a)로 원소 개수를 세지 마세요. 길이를 함께 넘기세요.

int sum(const int *a, int n) {
  int s = 0;
  for (int i = 0; i < n; i++) s += a[i];
  return s;
}

위험한 것

실험에서는 작은 고정 배열과 printf로 값을 확인하는 정도면 충분합니다.

다음

문자열(char* / char[]) 레슨에서 null 종료를 이어서 보세요.

그림으로

x = 3
p ──► [ 3 ]

p를 복사해도 같은 주소를 가리킵니다. *p를 바꾸면 x가 바뀝니다.

const

const int *p;  // 가리키는 값을 바꾸지 않음
int *const q;  // 포인터 자체 재할당 금지

읽기 전용 버퍼에는 const int *를 쓰면 실수 방지에 도움이 됩니다.

한 줄

> 배열을 넘길 때는 포인터 + 길이. sizeof로 세지 않는다.

더 깊게

읽은 뒤 연습장에서 예제 코드를 한 번 타이핑해 보세요. 눈으로만 보면 하루 뒤 사라집니다.

관련 원리 카드와 문제 태그로 바로 이어서 풀면, 문법·패턴이 한 묶음으로 남습니다.

막히면 30분 규칙: 입력을 로그로 확인 → 기대/실제 한 줄 비교 → 그래도 안 되면 배우기 레슨으로 잠시 복귀.

관련 짧은 원리

관련 문제