디렉토리
정의 함수 포인터
메모리 주소의 기능이있다 :
#include <stdio.h>
void fun()
{
printf("hello, world\r\n");
}
int main(int argc, char* argv[])
{
printf("%p\r\n", fun);
return 0;
}
어드레스 때문에, 포인터는 저장 기능 (제 1), 어드레스 포인터에 저장된 주소를 변경이라고 정의 할 수 함수 포인터 .
일부 특수 기능 포인터 정의는, 예를 들어, 정의 가리킬 수 반환 값 INT를 INT 매개 변수는 함수가 포인터 다음 문을 :
#include <stdio.h>
int fun(int arg)
{
printf("hello, world\r\n");
}
int main(int argc, char* argv[])
{
int(*pfn)(int) = NULL;
pfn = fun;
return 0;
}
함수 포인터 선언은 다음과 같이하여 수행 할 수 있습니다 :
- 목적 함수의 첫 번째 프로토 타입을 쓰기
- 목적 함수는 함수의 이름은 포인터 변수 이름을 변경하는 기능
- "*"기호와 기능 이름으로 괄호
함수 포인터의 복잡성
우리는 그 함수 정의하면, 상상 인수 함수를 , 반환 값은 함수입니다 있습니다 프로토 타입 :
- 매개 변수 : 매개 변수, 더 리턴 값 없습니다
- 반환 값 : 값 반환 INT와 매개 변수를 int로
다음 코드와 유사 최종 완료 문 :
#include <stdio.h>
#include <signal.h>
void FunArg()
{
printf("我是没有参数没有返回值的函数\r\n");
}
int FunReturn(int arg)
{
printf("我是int参数,int返回值的函数\r\n");
return 0;
}
int(*MyFunction(void (* pArg)(void) ))(int)
{
printf("我是参数及返回值都是函数的函数\r\n");
return FunReturn;
}
int main(int argc, char* argv[])
{
MyFunction(FunArg);
return 0;
}
C 언어 함수 포인터의 변수 이름 때문에 맨 끝에 아니므로 결합 된 함수 포인터 타입, 그것은 매우 이상하다.
단순화하기 위해, 우리는 형식 정의 구문을 사용할 수 있습니다.
타입 정의
타입 정의는, 우리가 사용할 수 별칭을 선언하는 키워드 형식 정의입니다 별명의 유형 .
기본 구문은 다음과 같습니다
typedef <原类型名> <新别名>
새로운 별명의 효과와 원본과 효과의 종류
typedef int MYINT;
int main(int argc, char* argv[])
{
MYINT value = 5;
return 0;
}
코드의 가독성을 향상시킬 수있는 타입 정의를 사용합니다.
특히 함수 포인터에 대한 별칭에서 함수 포인터 별칭 식별자가 우리 앞에 코드를 단순화하기 위해 타입 정의를 사용하여, 예를 들어, 형식 정의 후 새로운 솔루션, 그것은 더 원래의 유형 이름 소위 없다, 고유 :
#include <stdio.h>
#include <signal.h>
void FunArg()
{
printf("我是没有参数没有返回值的函数\r\n");
}
int FunReturn(int arg)
{
printf("我是int参数,int返回值的函数\r\n");
return 0;
}
typedef void(*PFN_ARG)(void);
typedef int(*PFN_RETURN)(int);
PFN_RETURN MyFunction(PFN_ARG arg)
{
printf("我是参数及返回值都是函数的函数\r\n");
return FunReturn;
}
int main(int argc, char* argv[])
{
MyFunction(FunArg);
return 0;
}
기능 정확하게 이전과 코드,하지만 훨씬 가독성이 강화.