05. 함수 포인터 (Function pointer)와 void 포인터

2025. 6. 27. 11:09·프로그래밍 언어/C

✅ 함수 포인터 (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
'프로그래밍 언어/C' 카테고리의 다른 글
  • 04. 포인터와 문자열
  • 03. 자료형 변환 (Type casting)
  • 02. 상수(Constant)
  • 01. 실수 표현 (고정 소수점과 부동 소수점)
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어 N
        • C N
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    상수
    pbd
    유체 시뮬레이션
    jump table
    fluid simulation
    surface turbulence
    물리 기반 시뮬레이션
    정수 승격
    OpenGL
    Flip
    그리드 기반 방법
    파동 난류
    C언어
    GLSL
    screen-space rendering
    wave simulation
    입자 기반 방법
    narrow range filter screen-space fluid rendering
    collision
    position based dynamics
    명령어
    실수
    cloth simulation
    컴퓨터 구조
    액체 시뮬레이션
    fluid implicit particle
    시스템 프로그래밍
    screen space fluid rendering
    RAM
    bilateral blur
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
05. 함수 포인터 (Function pointer)와 void 포인터
글쓰기
상단으로

티스토리툴바