본문 바로가기
Programing_Language/C

함수 포인터(Function Pointer) 와 보이드 포인터(Void*)

by neohtux 2016. 11. 2.
728x90

□ 함수 포인터


 - 실행 코드인 함수의 주소를 다루는 포인터


 - 함수의 이름은 함수가 있는 메모리의 시작주소가 된다.






함수명이 함수의 메모리의 주소이므로,


함수 포인터에 저장하면 함수를 다양한 방식으로 호출 할 수 있다.







함수 형태는 매개변수의 개수와 자료형,


그리고 반환값의 자료형으로 정의 한다.





□ 함수 포인터 배열


 - 함수 포인터를 배열에 저장하여 사용할 수 있다.







□ 예제로 함수 포인터 살펴보기

 




함수 포인터를 선언할때 매개변수의 타입 또는 갯수를 설정해주지 않은 경우에는 


가리키는 함수의 매개변수 형태와 상관없이 (반환값은 일치해야함) 정상적으로 실행되는 모습을 볼 수 있다.




하지만,


함수 포인터의 매개변수 형태(갯수)를 지정해놓은 경우, 갯수가 맞지 않아 컴파일시 다음과 같은 오류를 보게된다.




에러내용은 18번째줄 mp 함수의 인자 갯수가 많다는 것이다. 


즉, 선언시 함수 형태를 맞게 호출하여 사용자 정의 함수 형태 오류 체크를 쉽게 할 수 있다.






함수 포인터 배열을 통하여 0번째 인덱스에 add 함수와, 1번째 인덱스에 mul 함수를 가리키게 하였다.


결과 값은, 첫 번째 줄에 : 7이 출력되고, 

            두 번째 줄에 : 18이 출력된다.




□ void* (보이드 포인터)

 

 - void 포인터는 가리키는 타입이 정해지지 않은 타입이다.






정해저 있지 않은 타입으로써 void 포인터를 사용할때는 원하는 형태로 변환하여 사용할 수 있다.






□ 예제로 Void 포인터 살펴보기

 


하나의 void타입 포인터 변수로 


서로 다른 타입의 변수의 주소를 저장하여 참조한 값을 출력하는 결과를 볼 수 있다.




※ 명시적으로 형변환 하여 사용하는 것이 좋다.



300x250

댓글