본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 21일 차 : 함수포인터

안녕하세요 넬다이입니다.

 

오늘은 함수 포인터를 배워보도록 할 텐데요

 

포인터를 지나온 여러분들이라면은 쉽게 이해가 가실 것이라고 생각하며 다들 파이팅입니다 ㅎ


함수 포인터

함수 포인터는 특정 함수에 대한 메모리 주소를 담을 수 있는 것이다. 
함수 또한 메모리 주소를 가지고 있으며 그 함수에 해당하는 기계어 코드가 저장된 메모리 블록의 시작 주소입니다.

 

장점은 재사용성이 극대화되는 점이 있습니다.

 

int	Sum(int iA, int iB)
{
	return iA + iB;
}

이런 Sum을 해주는 함수가 있는데요 이를 함수 포인터로 담아서 사용을 해보도록 하겠습니다.

 

#include <iostream>

using namespace std;

int	Sum(int iA, int iB);

void main(void)
{
	//함수 포인터를 사용하게 되면 호출 방법이 쪼금 다른데.. 
	
	//함수 포인터의 선언
	int (*SumPtr)(int, int);

	SumPtr = Sum;

	//2가지의 방법이 있다.
	cout << (*SumPtr)(10, 20) << endl;
	cout << SumPtr(20, 30) << endl;
}

int	Sum(int iA, int iB)
{
	return iA + iB;
}

이처럼 보면은 포인터는 변수만 담는 것이 아니라 주소를 담는 곳이기 때문에

함수 또한 주소이며 그 주소를 담을 수 있는 함수 포인터가 존재합니다 재사용성이 높기 때문에 자주 사용되고 있습니다.

 

지금은 이 부분을 잘 사용을 하지 않을지도 모르지만 후에는 이 함수 포인터를 통해서 구현을 하는 경우가 은근히 많으므로 잘 익혀두면 좋습니다.

 

팁.

C랑 C++에서는 하나의 함수 내에서 다른 함수를 정의할 수 없게 되어 있습니다.
프로그램이 실행되다가 함수를 메모리 공간에 올릴 수가 없기 때문에,

기본적으로 함수는 외부 링크라는 것을 갖고 있습니다.

이를통해서 알 수 있는점이 프로그램이 켜져 있는 동안 여러 파일이 함수를 공유할 수 있다는 뜻입니다.

 

오늘은 조금 간단하게 끝난 감이 없잖아 있는데요 조금 쉬어가는 타이밍이라고 생각하시면 편할 것 같습니다.

그럼 다음 정리시간에 뵙도록 하겠습니다 ㅎ

 

[개발/C&C++] - (C/C++ 속성 정리) 20일 차 : 레퍼런스 변수의 사용

[개발/C&C++] - (C/C++ 속성 정리) 19일 차 : 재귀 함수 및 2차원 배열

[개발/C&C++] - (C/C++ 속성 정리) 18일 차 : 리스트를 이용해서 성적표 만들기 및 설계

[개발/C&C++] - (C/C++ 속성 정리) 17일 차 : 성적표 만들기 및 설계

[개발/C&C++] - (C/C++ 속성 정리) 16일 차 : 메모리 관련 함수

[개발/C&C++] - (C/C++ 속성 정리) 15일 차 : 포인터와 동적할당