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' 카테고리의 다른 글

07. 공용체 (Union)  (0) 2025.07.01
06. 구조체 (Struct)  (0) 2025.06.30
04. 포인터와 문자열  (2) 2025.06.26
03. 자료형 변환 (Type casting)  (0) 2025.06.24
02. 상수(Constant)  (0) 2025.03.31
'프로그래밍 언어/C' 카테고리의 다른 글
  • 07. 공용체 (Union)
  • 06. 구조체 (Struct)
  • 04. 포인터와 문자열
  • 03. 자료형 변환 (Type casting)
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어
        • C
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

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

티스토리툴바