배열의 이름이 메모리의 주소 인 것처럼, 함수의 이름 역시 메모리의 주소이다.

하지만 함수의 이름은 코드가 저장된 메모리 주소로 쓰기를 수행할 수 없다.

함수 포인터는 함수의 이름을 저장하기 위한 포인터로 함수 호출 연산자의 피연산자가 될 수 있다. (함수 포인터로 인자로 사용해서 함수를 호출할 수 있다인 듯)

함수에 대해서 포인터 변수를 선언하는 형식: 반환_자료형 (*변수_이름)(매개변수_자료형);

#include <stdio.h>
02 :
03 :  int TestFunc(int nData)
04 :  {
05 :      puts("TestFunc() - call");
06 :      return 0;
07 :  }
08 :
09 :  void main(void)
10 :  {
11 :    int (*pfTestFunc)(int) = NULL ; 
12 :    pfTestFunc = TestFunc ; 
13 :    pfTestFun(10)
14 :  }
15 :

<aside> 🙋🏻‍♀️ 막간을 이용한 ‘배열’ 복습 시간 !

int anData[4] = {1, 2, 3, 4};

이러한 배열이 존재할 때 anData[1]*(anData + 1) 의 의미는 동일하다!

유사하게, anData&anData[0] 은 같은 주소이다!

C언어에서 모든 문자열의 끝은 NULL(0) 입니다.

만일 크기가 12인 메모리에 12개의 영문자를 저장하면 총 13바이트의 메모리가 변경됩니다. 왜냐하면 맨 나중에 자동으로 NULL( 0 )이 추가되기 때문입니다. 이 때문에 마치「szName[12] = 0;」이 라는 코드가 실행되는 결과를 가져옵니다.

</aside>

Untitled

Untitled