---
id: c-pointers
title: "C Pointers"
category: "Programming_Language"
status: "draft"
verification_status: "conceptual"
canonical_id: ""
aliases: ["pointer declaration", "dereference operator", "C 포인터"]
duplicate_of: ""
source_trust_level: "B"
confidence_score: 0.87
created_at: 2026-07-04
updated_at: 2026-07-04
review_reason: ""
merge_history: []
tags: ["c", "programming-language", "w3schools", "pointers"]
raw_sources: ["https://www.w3schools.com/c/c_pointers.php"]
applied_in: []
github_commit: ""
---

# [[C Pointers]]

## 🎯 한 줄 통찰 (One-line insight)
The `*` symbol does two OPPOSITE jobs depending on where it appears — in a declaration (`int* ptr`) it CREATES a pointer, but everywhere else (`*ptr`) it DEREFERENCES one to retrieve the pointed-to value — and the source explicitly flags this dual meaning as a common source of confusion, since the same character means "this variable will hold an address" in one context and "give me what's at this address" in another. [S1]

## 🧠 핵심 개념 (Core concepts)
- **Pointer** — a variable that stores another variable's memory address as its value. [S1]
- **Type-matched declaration** — a pointer's declared type must match the type of variable it points to (`int* ptr` for an `int`). [S1]
- **`*` in declaration vs. elsewhere** — `int* ptr;` creates a pointer variable; `*ptr` (outside declaration) dereferences it to get the pointed-to value. [S1]
- **Two equivalent declaration styles** — `int* myNum;` and `int *myNum;` are functionally identical; spacing around `*` is purely stylistic. [S1]
- **Why pointers matter** — enable direct memory manipulation (reducing code, improving performance), are essential for implementing data structures (lists, trees, graphs), and are sometimes REQUIRED (e.g. file I/O, memory management). [S1]

## 📖 세부 내용 (Details)
- Creating a pointer and reading the address it stores: `int myAge = 43; int* ptr = &myAge; printf("%p\n", ptr); // same address as &myAge`. [S1]
- Dereferencing to get the pointed-to value: `printf("%d\n", *ptr); // 43 (myAge's value, accessed via the pointer)`. [S1]

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
- **`*`의 이중 의미**: 선언에서 쓰인 int* ptr는 포인터 변수를 만들지만, 선언이 아닌 곳에서 쓰인 *ptr는 역참조 연산자로 동작한다는 점이 혼동 요소로 명시적으로 지적됨. [S1]
- **포인터 취급 시 주의사항**: 다른 메모리 주소에 저장된 데이터를 손상시킬 수 있으므로 포인터는 신중하게 다뤄야 한다고 경고됨. [S1]

## 🛠️ 적용 사례 (Applied in summary)
현재 발견된 실제 적용 사례가 없습니다 — 리스트/트리/그래프 같은 자료구조를 구현하거나 파일 및 메모리 관리 작업을 할 때 포인터가 필수적으로 쓰인다고 원문에서 직접 언급됨. [S1]

## 💻 코드 패턴 (Code patterns)
Creating a pointer, then reading the address vs. the dereferenced value (C):
```c
int myAge = 43;     // Variable declaration
int* ptr = &myAge;  // Pointer declaration
printf("%p\n", ptr);  // Reference: memory address of myAge
printf("%d\n", *ptr); // Dereference: value of myAge (43)
```

## ✅ 검증 상태 및 신뢰도
- **상태:** draft
- **검증 단계:** conceptual
- **출처 신뢰도:** B (W3Schools — widely used educational reference, not a primary standards body)
- **신뢰 점수:** 0.87
- **중복 검사 결과:** 신규 생성 (New discovery)

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[C Tutorial]]
- **관련 개념:** [[C Memory Address]], [[C Pointers Arithmetic]]
- **참조 맥락:** 포인터 기초 — 포인터 연산(Pointers Arithmetic) 챕터로 이어짐.

## 📚 출처 (Sources)
- [S1] W3Schools — C Pointers — https://www.w3schools.com/c/c_pointers.php

## 📝 변경 이력 (Change history)
- 2026-07-04: Initial draft synthesized from the W3Schools "C Pointers" page (Astra wiki-curation, P-Reinforce v3.1 format).
