關於 typedef 對函數的使用
有typedef int INT 知道可以這樣用但如果我有這樣一個函數
void myFun(int x)
{
printf("%d\n",x);
}
如何通過 typedef 把函數聲明為一個自定名,然後再調用呢?? 我只知道这样的写法
#include "stdio.h"
void myFun(int x)
{
printf("%d\\n",x);
}
#define mf(x) myFun(x)
int main(){
myFun(1);
mf(2);
return 0;
}
下面我们来看一下函数指针类型的定义及使用:(请与上对照!)
//自行包含头文件
void MyFun(int x); //此处的申明也可写成:void MyFun( int );
typedef void (*FunType)(int ); //这样只是定义一个函数指针类型
FunType FunP; //然后用FunType类型来申明全局FunP变量
int main(int argc, char* argv[])
{
//FunType FunP; //函数指针变量当然也是可以是局部的 ,那就请在这里申明了。
MyFun(10);
FunP=&MyFun;
(*FunP)(20);
return 0;
}
void MyFun(int x)
{
printf(“%d\\n”,x);
}
看黑体部分:
首先,在void (*FunType)(int ); 前加了一个typedef 。这样只是定义一个名为FunType函数指针类型,而不是一个FunType变量。
然后,FunType FunP;这句就如PINT px;一样地申明一个FunP变量。
其它相同。整个程序完成了相同的事。
这样做法的好处是:
有了FunType类型后,我们就可以同样地、很方便地用FunType类型来申明多个同类型的函数指针变量了。如下:
FunType FunP2;
FunType FunP3;
//……
這是網上找到的,不過不太懂,試過牠那樣寫好像不行 是可以的吧,因为已经申明了一个函数指针类型了,简化下他的写法就是
#include "stdio.h"
void myFun(int x)
{
printf("%d\\n",x);
}
typedef void(*ft)(int);
int main()
{
ft mf;
mf = &myFun;
myFun(1);
mf(2);
return 0;
}
也可以不用typedef,可以直接来申明一个像一般变量一样的函数指针
#include "stdio.h"
void myFun(int x)
{
printf("%d\\n",x);
}
void(*mf)(int);
int main()
{
mf = &myFun;
myFun(1);
mf(2);
return 0;
}
哦 原來這樣,偶一直沒看清楚
原來typedef void (*FunType)(int );
是以 FunType 這個作為類型名了, 那樣跟 typedef int INT 區別還是比較大的。。。 是一模一样嘛- -……
没区别…… 有分別吧 INT好像有某種跨平台的意義吧
啊...某上浮了 typedef只是个别名而已。
ps.不知道LS潜在水里摸到了多少鱼 引用第6楼coolpay64于2007-12-26 20:32发表的:
有分別吧 INT好像有某種跨平台的意義吧
啊...某上浮了
BINGO^ ^
页:
[1]