포인터(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가 가리키는 주소의 값을 의미합니다.
'프로그래밍언어 > C언어[초급]' 카테고리의 다른 글
[C언어][초급] Chapter52. 포인터와 배열 – 배열의 시작 주소와 포인터의 관계 (0) | 2025.04.19 |
---|---|
[C언어][초급] Chapter51. 포인터 선언과 사용 – 다양한 자료형의 포인터 활용하기 (0) | 2025.04.19 |
[C언어][초급] Chapter49. 문자열 함수 – strcmp 함수로 문자열 비교하기 (0) | 2025.04.19 |
[C언어][초급] Chapter48. 문자열 함수 – strcat 함수로 문자열 이어 붙이기 (0) | 2025.04.19 |
[C언어][초급] Chapter47. 문자열 함수 – strcpy 함수로 문자열 복사하기 (0) | 2025.04.19 |