typedef 函数指针

参考博客:http://c.biancheng.net/view/298.html

样例:

#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;

typedef void(*p)(int, int);

void f(int a, int b)
{
    cout<<a+b<<endl;
}

int main()
{
    cout<<"hello"<<endl;
    int a=12, b=15;
    p ff=f;
    ff(a, b);

    return 0;
}

typedef 是用来定义某种类型的别名的。

一般定义简单类型别名的方式是

typedef <目标类型> <源类型>

但是函数指针的声明方式与其他指针不同

其他类型的指针的定义是:

<类型> *p;

而函数指针的定义是:

<返回类型>(*p)(<变量类型>,...)

没有办法写成

<返回类型>(<变量类型>,...) *p;

所以在用typedef 定义类型时就不再是

typedef <目标类型> <源类型>

而是

typedef <返回类型>(*目标类型)(<变量类型>,...)

被定义的新类型在中间,看起来就和其他类别别名的定义不一样。

特别是有人非得在返回类型后加个空格,看起来就更奇怪了,例如:

typedef void (*p)(int, int);

看起来就好像是要把 (*p)(int, int) 定义为 void 一样。但其实是个函数指针。

文章目录