티스토리 뷰


함수란 무엇인가?

우리는  main()함수, printf()함수, scanf()함수 등 다양한 함수를 사용하고 있습니다.

각 함수마다 이름이 있는데요 이 이름들이 바로 함수의 시작 주소 입니다.

main()함수의 이름은 main함수 이런식으로요


그럼 포인터 함수는 무엇인가요?


이전 시간에 포인터는 주소를 저장하는 것 이라고 정의를 내렸습니다.

또한 포인터 변수는 어떠한 변수의 주소를 참조하는 것 이라고 정의로 내렸습니다.


그럼 포인터 함수는 위와 같은 개념을들 생각하면 아주 쉽게 생각할 수 있습니다.

바로 함수의 시작주소를 저장하는 변수 입니다.


포인터 함수의 사용방법


int (*pointer) (int, int)


int : 자료형[이 함수가 어떤 형태로 나타내어 질건지 선택하는 자료형]

(*pointer) : 포인터 함수 이름[반드시 괄호 안에 *를 입력해 주어야 됩니다.]

(int, int) : 인수 자료형 목록


그럼 간단한 예제를 통해서 알아보도록 하겠습니다.


[예제]




순서 ① double형 변수 x와 y에 초기화 해 준다.


순서 ② 함수 포인터를 선언을 해 준다. void (*pointer) (double, double)

단, 가르키는 대상인 함수의 출력, 입력형태와 매개변수의 자료형 갯수를 동일하게 맞춰줘야 합니다.




순서 ① 윗쪽 상단에 add라는 함수를 선언을 해주며 하단쪽에 add함수에 대한 설명을 적어줍니다.


순서 ② return을 안하는 이유는? -> 자료형이 void여서 할 필요가 없습니다. 


이 상태에서 Build하고 실행 시켜보면 아무런 Error가 없어야 정상입니다.


위에서 함수의 시작주소를 저장하는 변수라고 정의를 내렸습니다.

이제 이 내용을 증명해 보도록 하겠습니다.





순서 ① add함수의 시작 주소와 pointer함수의 시작주소를 확인해 줍니다.


add에는 &연산자를 안붙이는데 pointer에는 &연산자를 붙이는 이유는?


위에서 함수란 함수의 시작 주소라고 하였습니다. 이러한 이유때매 add에는 &연산자를 안붙여도 됩니다.

그치만 함수 포인터는 함수의 시작주소를 저장하는 변수 라고 언급을 하였습니다.

-> 이러한 이유때매 pointer에는 변수의 시작주소를 알수있게 해주는 &연산자를 사용하는 것 입니다.




이처럼 add와 함수 포인터의 주소는 일단 다르다는것을 확인 하였습니다.





순서 ① 함수 포인터에 add함수의 시작주소를 저장합니다.


이전의 포인터에 주소를 저장할때와 선언하는 방법이 다른 이유는 무엇인가요?


이전 포스팅에서 포인터변수에 변수의 시작주소를 저장할때는

ip=&x;

라고 한 기억이 있을 것 입니다. 근데 왜 여기서는 &연산자를 안붙이는 걸까요??

위의 질문과 동일한 내용 입니다. 함수의 이름은 함수의 시작 주소라고 정의를 하였습니다.

이때문에 &를 안붙여도 함수의 시작주소를 저장하는 것 입니다.


순서 ② 함수 포인터를 호출해 줍니다. pointer(x, y)

※일반적인 함수 호출방법과는 다릅니다. 원래 일반적인 함수의 호출은 선언한 함수를 호출해 줍니다.

   그치만 여기서는 함수포인터 pointer가 add함수를 가르키고 있습니다.

   따라서 pointer함수를 호출하면 add함수를 호출하는 것과 마찬가지 입니다.

-> add함수를 가르키니까~^^






text.txt





Comments