자 하나하나 보자. 우선 함수 프로토타입(함수 원형) 선언에 대해서는 알고 있냐? include 밑에다가 void funcname(int, int); 식으로 쓰는 거 있잖아. 그렇게 하면 내부적으로는 funcname이라는 "변수"가 만들어지는데 이 변수는 그냥 그 함수 자체를 지칭하는 변수가 된다. 그리고 어떤 변수 타입에 대해서 포인터를 만들 때는 그 변수 선언문의 이름 부분에 이름 대신 (*이름)을 넣어주면 포인터 변수가 된다. int (*ptr); (int의 포인터)나 char (*arr)[3]; (배열의 포인터)처럼. 물론 int (*ptr) 같은 경우는 괄호 생략이 가능하다.
ㅅㅅㅅ(125.128)2015-04-25 22:13
마찬가지로 함수도 void (*func_ptr)(int, int); 처럼 쓸 경우 void xxx(int, int); 꼴로 선언될 수 있는 함수들을 가리키는 포인터 변수가 된다. 기계어 코드의 메모리 주소를 갖는 변수가 되는 거지. 이제 다 설명해줬다. 저 라인은 void xxx(int signo, void (*func)(int)) 꼴로 선언될 수 있는 함수를 가리키는 signal이라는 함수 포인터 변수를 만든 거야. 인자의 void (*func)(int) 역시 void xxx(int) 꼴로 선언될 수 있는 함수에 대한 포인터 매개 변수 func인 거고.
ㅋㅋ 존나 쉬운건데
쉬운데 더럽다
쉽다고만하지말고 알려줘라 ㅠㅠ
자 하나하나 보자. 우선 함수 프로토타입(함수 원형) 선언에 대해서는 알고 있냐? include 밑에다가 void funcname(int, int); 식으로 쓰는 거 있잖아. 그렇게 하면 내부적으로는 funcname이라는 "변수"가 만들어지는데 이 변수는 그냥 그 함수 자체를 지칭하는 변수가 된다. 그리고 어떤 변수 타입에 대해서 포인터를 만들 때는 그 변수 선언문의 이름 부분에 이름 대신 (*이름)을 넣어주면 포인터 변수가 된다. int (*ptr); (int의 포인터)나 char (*arr)[3]; (배열의 포인터)처럼. 물론 int (*ptr) 같은 경우는 괄호 생략이 가능하다.
마찬가지로 함수도 void (*func_ptr)(int, int); 처럼 쓸 경우 void xxx(int, int); 꼴로 선언될 수 있는 함수들을 가리키는 포인터 변수가 된다. 기계어 코드의 메모리 주소를 갖는 변수가 되는 거지. 이제 다 설명해줬다. 저 라인은 void xxx(int signo, void (*func)(int)) 꼴로 선언될 수 있는 함수를 가리키는 signal이라는 함수 포인터 변수를 만든 거야. 인자의 void (*func)(int) 역시 void xxx(int) 꼴로 선언될 수 있는 함수에 대한 포인터 매개 변수 func인 거고.