함수를 변수에 저장?

JS나 python을 보면 파라미터로 함수를 던지거나 변수에 함수를 할당하거나 이런 일들을 많이 하는데 처음에는 너무나 골때려서 헷갈렸다. 어떻게 저렇게 함수를 넘길수있지? 함수는 실행하는 놈인데.. 이런걸 First Class Function 이라고 하라나 뭐라나.. 

 

C언어 포큐아카데미

위의 예제처럼 op1, op2를 받고 operator로 함수를 받고 싶은 함수가 있다. 그러니깐 함수를 파라미터로 던져야된다..

도대체 어떻게 할까?

 

 

함수 호출은 주소로의 Jump다

C언어 포큐아카데미

Sub 함수를 호출하는 것은 내부적으로 컴파일 될때 지정된 주소로 Jump 하는 것과 같다. 

 

00E211A6 메모리 주소에 저장된 명령어 call은 sub 함수 호출 즉 0E21040 주소로 jump 하라는 명령어다.

그러니 00E21040과 같은 함수 시작 주소를 담는 변수만 있으면 된다는 말이다. 어?!! 주소를 담는 변수? 그래 바로 포인터다. 함수 포인터!!

 

 

함수 포인터 문법

C언어 포큐아카데미

함수 포인터니깐 function * 이렇게 쓰면 귓빵맹이를 맞는다 

 

C언어 포큐아카데미

함수 포인터는 <반환형> (* 변수명)<매개변수 목록> 이런식으로 사용해야된다!

 

calculate에서 받는 매개변수 x, y는 쉬위니깐 PASS하고 함수를 받을때는 double (* func)(double, double) 이런식으로 해야된다!

 

C언어 포큐아카데미 좋다.

'C' 카테고리의 다른 글

C언어 배열 삽입, 삭제  (2) 2020.01.03
C언어 void*  (0) 2019.12.20
C언어 얕은복사 vs 깊은복사  (0) 2019.12.18
C언어 구조체  (0) 2019.12.18
C언어 포인터 배열  (0) 2019.12.13

+ Recent posts