null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
⌂
c-lang-intermediate
Structure
pointers
•
포인터 기초 (Pointer Basics)
•
배열과 포인터 (Pointer & Array)
•
포인터와 함수 (Pointer & Function)
memory
•
스택과 힙 (Stack & Heap)
•
메모리 레이아웃 (Memory Layout)
dynamic-alloc
•
malloc과 free (malloc & free)
•
calloc과 realloc
•
메모리 누수 (Memory Leak)
struct
•
구조체 기초 (Struct Basics)
•
중첩 구조체, 구조체 배열, 구조체 포인터
•
union과 enum
file-io
•
파일 열기와 닫기 (fopen / fclose)
•
파일 읽기와 쓰기 (Read & Write)
•
바이너리 파일 (Binary File)
preprocessor
•
#define과 매크로 (Define & Macro)
•
헤더 중복 포함 방지 (Include Guard)
•
조건부 컴파일 (Conditional Compilation)
multi-file
•
헤더 파일 (Header Files)
•
extern과 static (Extern & Static)
•
Makefile 기초 (Makefile Basics)
debugging
•
GDB 기초 (GDB Basics)
•
Valgrind
•
자주 발생하는 C 오류 (Common Errors)
project
•
종합 프로젝트: 학생 관리 시스템 (Student Manager)
Flow Structure
Prev
1 / 24
배열과 포인터 (Pointer & Array)
☆ Star
↗ Full
포인터 기초 (Pointer Basics)
#c
#c-lang
#intermediate
#pointer
#reference
@devpc
|
2026-03-29 13:06:56
|
GET /api/v1/flows/5/nodes/41?fv=2&nv=2
Context:
Flow v2
→
Node v2
0
Views
5
Calls
# 포인터 기초 (Pointer Basics) ## 포인터란? 포인터(Pointer)는 **다른 변수의 메모리 주소를 저장하는 변수**입니다. C 언어에서 포인터는 메모리를 직접 다룰 수 있게 해주는 핵심 기능입니다. --- ## 선언과 초기화 ```c int a = 10; int *p; // 포인터 선언 (int형 변수의 주소를 담을 수 있음) p = &a; // a의 주소를 p에 저장 ``` | 표현식 | 의미 | |--------|------| | `int *p` | `p`는 `int`를 가리키는 포인터 | | `&a` | 변수 `a`의 주소(address) | | `*p` | `p`가 가리키는 곳의 값(역참조, dereference) | --- ## `&` 연산자 — 주소 연산자 ```c int a = 42; printf("%p\n", (void*)&a); // a의 메모리 주소 출력 (예: 0x7ffee4b2c) ``` - `&a` : 변수 `a`가 저장된 메모리 주소를 반환합니다. --- ## `*` 연산자 — 역참조 연산자 ```c int a = 42; int *p = &a; printf("%d\n", *p); // 42 — p가 가리키는 곳의 값 *p = 100; // a의 값을 100으로 변경 printf("%d\n", a); // 100 ``` - `*p` : 포인터 `p`가 가리키는 주소에 있는 값을 읽거나 씁니다. --- ## NULL 포인터 포인터를 초기화하지 않으면 **쓰레기 값**을 가집니다. 아무것도 가리키지 않는 포인터는 반드시 `NULL`로 초기화하세요. ```c int *p = NULL; if (p == NULL) { printf("포인터가 초기화되지 않았습니다.\n"); } ``` > ⚠️ NULL 포인터를 역참조(`*p`)하면 **세그멘테이션 폴트(Segmentation Fault)** 가 발생합니다. --- ## 포인터의 크기 포인터 자체의 크기는 **시스템 아키텍처에 따라 결정**됩니다. ```c printf("%zu\n", sizeof(int *)); // 64비트: 8바이트, 32비트: 4바이트 printf("%zu\n", sizeof(char *)); // 동일 printf("%zu\n", sizeof(double *)); // 동일 — 가리키는 타입과 무관 ``` --- ## 포인터와 타입 포인터 타입은 **역참조 시 몇 바이트를 읽을지** 결정합니다. ```c int a = 65; int *ip = &a; char *cp = (char*)&a; printf("%d\n", *ip); // 65 (4바이트 읽음) printf("%c\n", *cp); // 'A' (1바이트 읽음, 리틀엔디안 기준) ``` --- ## 정리 | 개념 | 설명 | |------|------| | 포인터 선언 | `타입 *변수명;` | | 주소 얻기 | `&변수` | | 역참조 | `*포인터` | | 안전한 초기화 | `= NULL` | | 포인터 크기 | 아키텍처에 따라 4 또는 8바이트 | ---
Prev
배열과 포인터 (Pointer & Array)
// COMMENTS
ON THIS PAGE
No content selected.