C언어(2020년)

32. 함수 포인터

리더2333 2020. 11. 4. 16:23
반응형

포인터가 데이터(변수)의 주소만 사용할 수 있는 것은 아니다.

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