-38- C 제로 비디오 및 함수 포인터의 typedef

정의 함수 포인터

메모리 주소의 기능이있다 :

#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;
}

기능 정확하게 이전과 코드,하지만 훨씬 가독성이 강화.

추천

출처www.cnblogs.com/shellmad/p/11695642.html