typedef void (*Fun) (void) 的理解

int i;//定义int类型变量i;
typedef int MyInit;//定义一种类型
MyInit j;//定义int类型变量j;

下面介绍一些函数指针的使用

形式一:返回类型  (*函数名)  (参数表)

#include<...>

char (*pFun) (int); //定义一个参数类型为int 返回值为char的函数指针pFun;
//函数名即指针要指向的首地址

char test(int a)
{
    return a; 
}

int main()
{
//将函数名,即函数首地址复制给指针pFun;
    pFun = test;  //当函数首地址给到指针后,函数的内容也给到了指针(因为长度是类型的构成要素)。
//这时候通过指针解引用来操作本体(那个指针指向的东西)
   (*pFun)(2);   //相当于调用了test(2),其实就是调用了test(2);
}

形式二:typedef  返回类型(*新类型)(参数表)

//定义一种新类型,首先该类型是函数指针类型,指向一个函数,这个被指向的函数的参数类型为int 且返回值类型为char。
typedef char (*pNew) (int);

pNew pFun; //用类型来定义一个变量 类似 int i,在这里我们称pFun是pNew类型的

//然后我们让pFun指向一个和pFun般配的函数

pFun = test;//当把函数首地址和函数长度都给了pFun指针之后,pFun就可以操控指向的函数了

(*pFun)(2);//相当于给本体直接传了一个参数2;这里的*和定义pNew时的*号是不一样的,前面定义是用*是为了说明被定义的类型是指针类型,后面的*pFun是函数指针的解引用;
//*pFun 就和 test 在这儿放着一样!

猜你喜欢

转载自www.cnblogs.com/techecho/p/9570864.html