typedef 函数类型 详解

本博客以后只出精品,一篇博客可能需要诸多次改进才能完成,希望大家可以提出有效的建议。

首先需要搞清楚三个概念:

函数:

一个函数包括,函数名,返回值,参数列表。
那么函数名在C 语言中,表示什么呢? void fun(int a)我们在调用一个函数的时候,直接调用 fun(a),其实这里 fun表示 函数指针—这个函数代码所在的地址。 也就是说 函数名表示函数指针

函数类型:

函数类型: 表示这个函数的 返回值,参数列表 的类型。 表示“返回值,参数列表”相同的一个函数集合。

函数指针类型:

有了函数类型,那么函数指针类型表示 指向这些函数的指针了。
因为函数名本身就是函数指针,所以 可以采用 函数指针类型 来直调用某个函数。

typedef 自定义 “函数类型”

    typedef void sigfunc_rt(int, siginfo_t *, void *);

其中 sigfunc_rt 表示 一个类型,(函数类型)。 可以采用这个类型来声明和定义变量。

typedef 自定义”函数指针类型”

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

sighandler_t 是一个函数指针类型,signal是一个函数,返回一个函数指针。
可以通过sighander_t来定义函数指针变量。 可以给这些变量赋值,直接调用这些变量所指向的函数。我们通过函数指针来调用函数,函数指针指向函数代码所在的地址

举例分析

  1. typedef 自定义函数指针类型,并且通过函数指针调用函数
#include 

typedef int (*fp_t)(char c);

int f0(char c) { printf("f0, c = %c\n", c); return 0;}
int f1(char c) { printf("f1, c = %c\n", c); return 1;}

int main()
{
    int ret;
    fp_t fp;//fp是一个指向一个函数类型(返回的是int,参数是char)的函数指针

    fp = f0;
    ret = fp('a');通过函数指针调用函数

    fp = f1;
    ret = fp('x');
    return 0;
}
  1. typedef 自定义函数类型
#include 

typedef int f_t(char c);

int f0(char c) { printf("f0, c = %c\n", c); return 0;}
int f1(char c) { printf("f1, c = %c\n", c); return 1;}

int main()
{
    int ret;
    f_t *fp;//f_t是函数类型,所以fp是指向此函数类型的指针

    fp = f0;
    ret = fp('a');

    fp = f1;
    ret = fp('x');//函数指针调用此函数
    return 0;
}

参考:

[1] http://my.oschina.net/u/178323/blog/32452
[2] http://fouri.iteye.com/blog/483974
[3] http://www.zhihu.com/question/19894694
[4] http://blog.csdn.net/weiwangchao_/article/details/7682440

你可能感兴趣的:(c++,学习之路)