C

함수 포인터

오군_ 2023. 5. 19. 10:27
반응형
함수 포인터란?
  • 함수의 이름은 그 함수가 저장된 메모리의 주소이다 (함수 포인터)
  • 함수의 주소값을 함수 포인터 변수를 선언해서 저장할 수 있다.
  • 함수 포인터에 함수의 주소를 담아서 함수처럼 사용이 가능하다

 

 

 

함수 포인터 변수 선언

함수 포인터 변수는 아래와 같이 선언할 수 있습니다.

반환형 (*변수명) (매개변수 데이터타입, ...);

int (*fptr) (int, int);	// 반환형 (*변수명) (매개변수 데이터타입, ...);

 

아래와 같이 함수 포인터 변수를 선언하고

그 변수에 함수를 할당받고 함수처럼 사용하면

함수와 같이 동일하게 쓰입니다.

이렇게 함수 포인터 변수에 저장된 값을 통해서도

함수호출이 가능합니다!

int Add(int num1, num2){...}
int (*fptr) (int, int);

fptr = Add;
fptr(1, 2);	// Add(1, 2)와 동일한 결과를 보임

 

 

 

 

 

함수 포인터 주의사항

매개변수가 다르면 참조 불가능

반환형이나 매개변수가 다르면 다른타입이기에 함수 포인터 변수에

그 함수를 할당할 수 없다

 

함수 이름은 같지만 매개변수랑 반환형이 다르면 함수 포인터형이 다른것이다.

 

void 포인터

어떠한 주소 값도 저장이 가능한 void형 포인터

형 정보가 존재하지 않는 포인터 변수이기에 어떠한 주소 값도 저장이 가능하다.

형 정보가 존재하지 않기 때문에 메모리 접근을 위한 *연산은 불가능하다.

 

함수의 형태든 int형이든 다 저장이 가능하다.

주소 값만을 저장하기에 값 할당, 주소의 값을 가져오는

포인터 연산이 안된다.

 

 

 

void 포인터 주의사항

void 포인터 또한  int포인터로 형변환이 가능하다

하지만 void포인터에 함수형 또한 담기는데 함수주소를 담을때

int포인터로 강제 형변환을 하면 컴파일 에러는 없지만,

함수의 기능이 정수형으로 사용되는 오작동을 하게 된다.

 

반응형

 

반응형