✅ 함수 포인터 (Function Pointer)
함수 이름도 배열 이름처럼 주소를 의미한다.
즉, 함수의 이름은 해당 함수가 저장된 메모리 공간의 시작 주소를 의미하며,
함수를 가리키는 포인터를 선언하고 사용할 수 있다.
📌 선언 방법
int Function(int a, int b); // 함수 선언
int (*fptr)(int, int) = Function; // 함수 포인터 선언 및 초기화
📌 함수 호출 방식
int result = fptr(10, 5); // 함수 호출
// 또는 (*fptr)(10, 5); 도 가능
🔹 함수 포인터를 사용하면 콜백 함수, 배열 내 함수 테이블, 동적 함수 선택 등에 활용할 수 있다.
✅ void 포인터 (Void Pointer)
void *ptr;
void 포인터는 어떠한 타입의 포인터도 저장 가능한 범용 포인터이다.
📌 특징
- 어떤 자료형의 주소도 저장할 수 있음
int a = 10; void *ptr = &a;
- 하지만 자료형 정보가 없기 때문에 직접 역참조하거나 연산은 불가능
📌 타입 캐스팅 후 사용
int a = 10;
void *ptr = &a;
printf("%d\n", *(int*)ptr); // ✅ 올바르게 타입 캐스팅 후 역참조
📌 활용 예시: 동적 메모리 할당
int *arr = (int*)malloc(sizeof(int) * 5);
- malloc은 void*를 반환하기 때문에,
- 필요한 타입으로 형변환(casting) 해서 사용해야 함
📌 void 포인터는 언제 쓰이나?
- 다양한 타입을 하나의 포인터로 관리하고 싶을 때
- 함수 인자로 어떤 타입이 올지 미리 알 수 없을 때
- 동적 메모리 할당 함수(malloc, realloc 등)의 반환 값 처리
✅ 요약 정리
구분 | 설명 |
함수 포인터 | 함수를 가리키는 포인터, 콜백 함수 등에 활용 |
void 포인터 | 자료형 정보 없이 모든 주소 저장 가능, 연산 불가능 |
💡 함수의 이름과 배열의 이름은 모두 “주소”를 의미한다.
💡 void*는 주소만 저장하고, 타입 정보는 나중에 정해서 처리하는 "범용 포인터"이다.
'프로그래밍 언어 > C' 카테고리의 다른 글
04. 포인터와 문자열 (2) | 2025.06.26 |
---|---|
03. 자료형 변환 (Type casting) (0) | 2025.06.24 |
02. 상수(Constant) (0) | 2025.03.31 |
01. 실수 표현 (고정 소수점과 부동 소수점) (0) | 2025.03.31 |