본문 바로가기
프로그래밍언어/C언어[초급]

[C언어][초급] Chapter50. 포인터란? – 메모리 주소를 다루는 핵심 개념

by about_IT 2025. 4. 19.
728x90

포인터(pointer)는 C언어에서 가장 중요하면서도 가장 어려운 개념 중 하나입니다.
하지만 개념을 제대로 이해하면 메모리 관리, 배열, 함수, 구조체 등 거의 모든 부분에 강해질 수 있어요.

포인터는 변수의 주소(위치)를 저장하는 변수입니다.
즉, 어떤 변수의 값을 직접 저장하는 게 아니라, 그 값이 저장된 "주소"를 저장합니다.


● 변수와 주소

int a = 10;
printf("%p\n", &a);

&a는 변수 a의 주소를 의미합니다. %p는 주소를 출력할 때 사용하는 서식입니다.


● 포인터 선언

int *p;

int형 변수를 가리키는 포인터입니다. 이 포인터는 어떤 int 변수의 주소를 저장할 수 있어요.


● 포인터에 주소 저장

int a = 10;
int *p = &a;

변수 a의 주소를 p에 저장했습니다. 이제 p는 a를 가리키게 됩니다.


● 포인터가 가리키는 값 출력

printf("%d\n", *p);

*p는 p가 가리키는 변수(a)의 값을 의미합니다. 결과는 10이 됩니다.


● 요약

  • *는 값을 꺼낼 때 사용 (역참조)
  • &는 주소를 가져올 때 사용
  • 포인터는 메모리 주소를 다룰 수 있는 강력한 도구입니다

포인터는 처음에는 헷갈릴 수 있지만, 메모리 개념을 눈으로 직접 다루는 연습이라 생각하면 좋습니다.
이후 배열, 함수 인자, 동적 메모리에서도 계속 등장하니 확실히 이해하고 넘어가야 합니다.


● 실습 문제

문제 1

int형 변수 a = 100을 선언하고, 그 주소를 포인터 p에 저장하세요.

 

문제 2

포인터 p가 가리키는 값을 출력하는 코드를 작성하세요.

 

문제 3

변수 a의 주소를 출력하는 코드와, 포인터 p의 값을 출력하는 코드가 같다는 것을 증명해보세요.

 

문제 4

다음 중 포인터 선언으로 올바른 것은?
1) int p*;
2) int *p;
3) int &p;
4) pointer int p;

 

문제 5

&a와 *p의 차이를 설명하세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

▶ 정답 확인하기

정답 1

int a = 100;
int *p = &a;

 

정답 2

printf("%d\n", *p);

 

정답 3

printf("%p\n", &a);
printf("%p\n", p);

두 출력값이 같으면, 포인터가 a를 가리킨다는 뜻입니다.

 

정답 4

정답: 2) int *p;

 

정답 5

&a는 변수 a의 주소를 의미하고, *p는 포인터 p가 가리키는 주소의 값을 의미합니다.

728x90