우선 말하고 싶은 것은 함수도 결국 메모리에 저장되고, 저장된 메모리 주소를 함수명으로 저장한다고 말할 수 있다.
아래의 실행결과와 코드를 보면
우선 함수 포인터 *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 |