반응형
포인터가 데이터(변수)의 주소만 사용할 수 있는 것은 아니다.
C언어에서 함수도 결국 컴파일되면 기계어로 변경되어지고, 실행되면 코드는 메모리영역에 위치하게 된다.
함수역시 메모리 주소를 가지게 된다는 뜻이다.
void TestFunction(int a)
{
printf("%d\n", a);
}
이와 같은 함수가 있다고 치자.
이 함수의 원형은 void (int) 이기 때문에 void (*) (int) 형태로 함수 포인터 자료형을 만들어야 한다.
void (*pFunc)(int); // 포인터 pFunc 의 자료형은 void (*)(int) 이다.
이렇게 함수포인터 pFunc 를 선언하였으면, 이제 TestFunction 의 주소를 대입하여야 한다.
pFunc = &TestFunction;
이렇게 하면 함수 TestFunction 의 주소를 pFunc 에 대입된다.
그런데 함수의 경우에는 함수 이름자체가 함수의 호출 주소가 되므로 아래와 같이 '&' 를 사용하지 않아도 동일하게 작동한다.
pFunc = TestFunction;
이 함수를 호출하려면 다음과 같이 한다.
(*pFunk)(10); // 원칙
이것이 원칙적인 표현인데, 코드사용이 불편하기 때문에 pFunc(10); 도 허용된다.
pFunc(10); // 허용
호출 결과 10 이 출력된다.
반응형
'C언어(2020년)' 카테고리의 다른 글
33. 형변환 (0) | 2020.11.04 |
---|---|
31. sizeof (0) | 2020.11.04 |
30. 문자열 (0) | 2020.11.04 |
29. typedef (0) | 2020.11.04 |
28. union (0) | 2020.11.04 |