null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
포인터 기초 (Pointer Basics)
#c
#c-lang
#intermediate
#pointer
#reference
@devpc
|
2026-03-29 12:57:37
|
GET /api/v1/nodes/41?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
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바이트 | ---
// COMMENTS
ON THIS PAGE