// education

포인터 심화와 활용 (이중 포인터, 함수 포인터)

포인터를 제대로 활용하면 이중 포인터, 배열 포인터, 함수 포인터 등 메모리를 아주 유연하게 제어하는 심화 기법을 사용할 수 있습니다.


1. 이중 포인터 (Pointer to Pointer)

이중 포인터(**)는 **"포인터 변수의 주소"**를 저장하는 변수입니다.

#include <stdio.h>

int main(void) {
    int num = 100;
    int *p = &num;   // 1차 포인터
    int **pp = &p;   // 2차 이중 포인터

    printf("num = %d\n", num);   // 100
    printf("*p  = %d\n", *p);    // 100
    printf("**pp = %d\n", **pp);  // 100
    return 0;
}

2. 포인터 배열 vs 배열 포인터


3. 함수 포인터 (Function Pointer)

함수도 실행 코드가 메모리에 탑재되므로 주소가 존재합니다. 함수의 주소를 저장하여 함수를 변수처럼 호출하거나 매개변수로 전달할 수 있습니다.

#include <stdio.h>

int add(int a, int b) { return a + b; }

int main(void) {
    // 반환타입 (*함수포인터이름)(매개변수타입)
    int (*func_ptr)(int, int) = add;

    int result = func_ptr(10, 20); // 함수 포인터로 add 호출
    printf("결과: %d\n", result); // 30
    return 0;
}

4. 자주 묻는 질문 (Q&A)

Q. 이중 포인터는 실무에서 주로 언제 쓰이나요? A. 함수 내부에서 외부의 포인터 변수 값(가리키는 주소 자체)을 직접 변경하고 싶을 때(예: 동적 메모리 재할당 함수, 연결 리스트 Head 노드 변경) 사용합니다.

← 이전구조체(Structure)와 사용자 정의 타입 다음 →스트림과 파일 입출력 (fopen, fclose, fread, fwrite)