C언어 초급 - 10장: 포인터 (10.1 포인터의 개념)
2025. 2. 24. 11:40ㆍ프로그래밍 언어/C
10.1 포인터의 개념
1. 포인터(Pointer)란?
포인터(Pointer) 는 변수의 메모리 주소를 저장하는 변수입니다.
즉, 변수 자체의 값이 아니라, 변수의 주소를 가리키는 변수입니다.
📌 포인터의 역할
- 변수의 메모리 주소를 저장하고 조작할 수 있음.
- 동적 메모리 할당(Heap Memory)에서 필수적으로 사용됨.
- 배열, 함수, 구조체 등과 함께 활용 가능.
2. 변수와 메모리 주소
2.1 변수와 메모리 저장 방식
모든 변수는 메모리의 특정 주소(Address) 에 저장됩니다.
#include <stdio.h>
int main() {
int num = 10;
printf("변수 num의 값: %d\n", num);
printf("변수 num의 메모리 주소: %p\n", &num);
return 0;
}
출력 예시
변수 num의 값: 10
변수 num의 메모리 주소: 0x7ffee3b3d9c0 (메모리 주소는 실행할 때마다 다름)
📌 설명
- num의 값은 10이지만, 실제 메모리에서 저장된 위치는 &num을 통해 확인할 수 있음.
- %p 서식 지정자를 사용하여 포인터(주소)를 출력.
3. 주소 연산자(&)와 포인터 연산자(*)
C 언어에서 포인터를 사용하려면 &(주소 연산자)와 *(포인터 연산자)를 이해해야 함.
3.1 주소 연산자(&)
- 변수의 메모리 주소를 반환함.
📌 예제 – 변수의 주소 확인
#include <stdio.h>
int main() {
int num = 10;
printf("변수 num의 값: %d\n", num);
printf("변수 num의 주소: %p\n", &num); // &num: 변수 num의 주소
return 0;
}
출력 예시
변수 num의 값: 10
변수 num의 주소: 0x7ffee3b3d9c0
📌 설명
- &num → 변수 num의 주소를 가져옴.
3.2 포인터 연산자(*)
- 포인터 변수를 선언할 때 사용 → 주소를 저장하는 변수 선언.
- 포인터 변수가 가리키는 주소의 값을 참조할 때 사용.
📌 예제 – 포인터 사용하기
#include <stdio.h>
int main() {
int num = 10;
int *ptr = # // 포인터 선언 및 주소 저장
printf("num의 값: %d\n", num);
printf("포인터 ptr이 가리키는 값: %d\n", *ptr);
printf("포인터 ptr이 저장하는 주소: %p\n", ptr);
printf("num의 주소: %p\n", &num);
return 0;
}
출력 예시
num의 값: 10
포인터 ptr이 가리키는 값: 10
포인터 ptr이 저장하는 주소: 0x7ffee3b3d9c0
num의 주소: 0x7ffee3b3d9c0
📌 설명
- int *ptr = # → ptr이 num의 주소를 저장.
- *ptr → ptr이 가리키는 변수 num의 값을 가져옴.
4. 포인터의 선언과 사용
4.1 포인터 변수 선언
자료형 *포인터이름;
- 포인터 변수 선언 시 *을 사용하여 선언.
- 포인터의 자료형은 가리키는 변수의 자료형과 같아야 함.
포인터 선언 | 설명 |
int *p; | int 타입 변수를 가리키는 포인터 |
double *p; | double 타입 변수를 가리키는 포인터 |
char *p; | char 타입 변수를 가리키는 포인터 |
📌 포인터의 자료형은 가리키는 변수의 크기와 연산에 영향을 미침.
📌 포인터 변수를 선언할 때 반드시 초기화해야 함 (초기화하지 않으면 쓰레기 값 포함됨).
4.2 포인터를 활용한 변수 값 변경
포인터를 사용하면 변수 값을 간접적으로 변경할 수 있음.
#include <stdio.h>
int main() {
int num = 10;
int *ptr = # // num의 주소를 포인터 ptr에 저장
printf("num의 초기 값: %d\n", num);
*ptr = 20; // 포인터를 이용하여 num 값 변경
printf("포인터 ptr을 이용하여 변경된 num 값: %d\n", num);
return 0;
}
출력 결과
num의 초기 값: 10
포인터 ptr을 이용하여 변경된 num 값: 20
📌 설명
- *ptr = 20; → ptr이 가리키는 메모리 주소의 값을 20으로 변경.
- 따라서 num의 값도 20으로 바뀜.
5. 정리
개념 | 설명 | 예제 |
포인터(Pointer) | 변수가 저장된 메모리 주소를 저장하는 변수 | int *ptr; |
주소 연산자(&) | 변수의 메모리 주소를 반환 | &num |
포인터 연산자(*) | 포인터가 가리키는 값에 접근 | *ptr = 20; |
포인터 선언 | 특정 자료형을 가리키는 포인터 선언 | int *p; |
포인터 초기화 | 특정 변수의 주소를 저장해야 함 | int *p = # |
포인터 값 변경 | 포인터를 사용하여 변수 값 변경 가능 | *ptr = 30; |
📌 포인터는 변수의 주소를 저장하는 변수!
📌 주소 연산자(&)를 사용하여 변수의 메모리 주소를 가져옴
📌 포인터 연산자(*)를 사용하여 포인터가 가리키는 값을 참조 또는 변경 가능
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 초급 - 10장: 포인터 (10.3 포인터와 함수) (0) | 2025.02.24 |
---|---|
C언어 초급 - 10장: 포인터 (10.2 포인터의 기본 연산) (0) | 2025.02.24 |
C언어 초급 - 9장: 함수 (Function) (9.4 재귀 함수 (Recursive Function)) (0) | 2025.02.24 |
C언어 초급 - 9장: 함수 (Function) (9.3 지역 변수와 전역 변수) (0) | 2025.02.24 |
C언어 초급 - 9장: 함수 (Function) (9.2 매개변수와 반환값) (0) | 2025.02.24 |