[C++] 함수 포인터

꿈별·2023년 5월 15일
0

C++

목록 보기
18/27

>함수 포인터(과거 포스트)

✔함수 포인터

: 함수를 가리키는 변수로, 함수의 주소를 저장한다.
-> 함수의 주소 전달할 때 함수 이름 앞에 & 붙이거나,
함수 이름 자체가 주소이므로 함수 이름만 적어도 됨

Sort(&s1, BubbleSort);

  • 함수 포인터 선언
    -> 함수 포인터 pFunc 는 함수 Test의 주소를 가리킨다.
    -> ❗ 선언 당시에 타입이 일치하는 함수만 가리킬 수 있다.
void Test() { }

int main()
{
	//인수와 반환값이 없는 함수에 대한 포인터 선언
	void(*pFunc)(void) = nullptr;
	pFunc = Test;
    pFunc(); //Test 함수 호출
}

  • 콜백 함수
    : 인자로 넘겨받은 함수.
    -> 다른 함수를 호출하여 특정 기능을 넘긴다.
    ex) 다양한 종류의 정렬 함수들을 구현하면 함수가 너무 많아진다. 따라서 개별적으로 구현하지 말고,
    정렬 함수 하나만 정의한 뒤 main 파일에 여러 함수들을 구현해 두고 정렬 함수에서 각 함수들을 호출한다.

    • ex) Sort 함수
void BubbleSort(int* _pData, int _iCount)

-> BubbleSort 함수의 인자 타입이 int*, int 이다.

void Sort(tArr* _pArr, void(*SortFunc)(int*, int))

-> Sort 함수가 임의의 정렬 함수를 받아올 때(예:BubbleSort), 반환 타입은 void, 인자는 int* 와 int 형태여야 한다.

void Sort(tArr* _pArr, void(*SortFunc)(int*, int))
{
	//데이터 시작 주소와 유효값 넘기기
	SortFunc(_pArr->pInt, _pArr->iCount);
}

[참고]
https://youtu.be/MzsOdFqtK7M
https://boycoding.tistory.com/233
https://badayak.com/entry/C%EC%96%B8%EC%96%B4-%ED%8F%AC%EC%9D%B8%ED%84%B0-%ED%95%A8%EC%88%98

0개의 댓글