실험장의 범위
/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;
}
위험한 것
- 초기화 안 된 포인터 역참조
- 스택 지역 변수 주소를 반환
- 버퍼 오버런 (
scanf에 길이 제한 없이 쓰기)
실험에서는 작은 고정 배열과 printf로 값을 확인하는 정도면 충분합니다.
다음
문자열(char* / char[]) 레슨에서 null 종료를 이어서 보세요.
그림으로
x = 3
p ──► [ 3 ]
p를 복사해도 같은 주소를 가리킵니다. *p를 바꾸면 x가 바뀝니다.
const
const int *p; // 가리키는 값을 바꾸지 않음
int *const q; // 포인터 자체 재할당 금지
읽기 전용 버퍼에는 const int *를 쓰면 실수 방지에 도움이 됩니다.
한 줄
> 배열을 넘길 때는 포인터 + 길이. sizeof로 세지 않는다.
더 깊게
읽은 뒤 연습장에서 예제 코드를 한 번 타이핑해 보세요. 눈으로만 보면 하루 뒤 사라집니다.
관련 원리 카드와 문제 태그로 바로 이어서 풀면, 문법·패턴이 한 묶음으로 남습니다.
막히면 30분 규칙: 입력을 로그로 확인 → 기대/실제 한 줄 비교 → 그래도 안 되면 배우기 레슨으로 잠시 복귀.