정보처리기사 실기 준비하면서 C언어의 개념을 간단하게 잡기 위해 공부하고 있는데요. 자료구조나 연산자 등은 자바와 비슷한 맥락이기 때문에 저는 바로 포인터 개념부터 시작했습니다.
C언어를 배우다 보면 가장 많이 헷갈리는 개념 중 하나가 바로 포인터(pointer)입니다.
하지만 포인터는 C언어의 핵심이자 강력한 기능이기 때문에 반드시 이해하고 넘어가야 합니다.
이 글에서는 포인터의 개념부터 활용까지 쉽게 설명해드릴게요.
📌 포인터란?
포인터는 변수의 메모리 주소를 저장하는 변수입니다. 일반적인 변수는 값을 저장하지만, 포인터는 "어디에 저장되어 있는가"를 기억합니다.
int a = 10; // 일반 변수
int *p = &a; // 포인터 변수, a의 주소를 저장
- *p는 p가 가리키는 주소에 있는 값을 의미합니다.
- &a는 변수 a의 주소를 의미합니다.
📌 포인터 선언 방법
자료형 *포인터이름;
int *ptr; // int형 데이터를 가리키는 포인터
char *cptr; // char형 데이터를 가리키는 포인터
📌 포인터를 사용하는 이유
- 함수에서 값이 아닌 주소를 전달 (Call by Reference)
→ 메모리 절약 + 값 변경 가능 - 동적 메모리 할당에 사용
→ malloc(), free() 등과 함께 사용 - 배열과 문자열 처리에 유리함
→ 포인터로 빠르게 탐색 가능
📌 포인터 예제
#include <stdio.h>
int main() {
int a = 100;
int *p = &a;
printf("a의 값: %d\n", a);
printf("a의 주소: %p\n", &a);
printf("포인터 p가 가리키는 값: %d\n", *p);
*p = 200;
printf("a의 새로운 값: %d\n", a);
return 0;
}
출력결과
a의 값: 100
a의 주소: 0x...
포인터 p가 가리키는 값: 100
a의 새로운 값: 200
📌 포인터의 주의점
- 선언된 포인터는 초기화하지 않으면 쓰레기 주소를 가리킬 수 있어 위험합니다.
- 잘못된 포인터 접근은 Segmentation Fault를 발생시킬 수 있습니다.
- 동적 메모리 사용 후에는 반드시 free()로 해제해야 합니다.
포인터는 처음에는 어렵지만 익숙해지면 C언어를 더 깊이 있게 이해할 수 있다고 해요. 메모리와 변수의 관계를 시각적으로 그려보며 연습하면 훨씬 수월해지니 그림으로 이해하는 방법을 추천드립니다.
'C' 카테고리의 다른 글
[C언어] C언어 함수 포인터(Function Pointer) 정리 (0) | 2025.03.26 |
---|---|
[C언어] 이중 포인터(Double Pointer) 정리 (0) | 2025.03.26 |
[C언어] 배열과 포인터의 관계 (0) | 2025.03.26 |