본문 바로가기
OS/Linux

[Linux/C] 함수 포인터

by dev_Step 2022. 3. 24.

우선 말하고 싶은 것은 함수도 결국 메모리에 저장되고, 저장된 메모리 주소를 함수명으로 저장한다고 말할 수 있다.

 

아래의 실행결과와 코드를 보면

우선 함수 포인터 *fp를 선언하였고 (반환형 void, 매개변수 없는)

해당 함수포인터에 test함수의 주소를 저장하였다.

이떄 fp,test의 주소와 데이터를 확인해보자 

test함수가 저장되어 있는 메모리주소의 시작점이 -472358470이 나왔고, 

함수형 포인터에 저장되어 있는 값또한  -472358470이 나왔다. 

즉 함수형 포인터 안에, 이미 선언되어있는 test함수의 시작 주소가 저장되었고 

fp포인터 자체의 메모리 주소는 2084418384가 나온것을 확인 할 수있다.(배열과 동일하게 함수의 값과 포인터 값을 동일 test, *test값이 동일했다.)

 

 

또한 포인터를 선언할때

매개변수에 의해서가 아니라 반환값에 의해서 포인터를 구분한다는것을 홗인할 수 있따.

해당 코드에서 

void (*fp)(int * a, int * b); 로 매개변수가 있는 함수형 포인터를 선언하고

fp = swap; 을 넣고

~~

fp = test; 을 넣고

test(); 실행했을때 

Warning이 뜨지 않았지만

 

int (*fp)(int * a, int * b); 로 함수형 포인터의 반환형을 int로 바꾸고 컴파일 하니 Warning이 뜨는것을 확인 할 수 있었다., 

 

선언된 함수형 포인터의 반환형과, 해당 함수형 포인터에 들어갈 함수의 리턴값이 동일해야함을 확인 할 수 있었다.

'OS > Linux' 카테고리의 다른 글

[C/Linux] 헤더 파일  (0) 2022.05.16
[Linux/C] GDB  (0) 2022.03.25
[Linux/C] 포인터  (0) 2022.03.23
[Linux/C] 비트연산자  (1) 2022.03.16
[Linux/C] C언어 서식 변환 문자  (0) 2022.03.13