august 发表于 2007-12-26 11:22:30

關於 typedef 對函數的使用

有typedef   int   INT   知道可以這樣用
但如果我有這樣一個函數
void   myFun(int   x)
{
      printf("%d\n",x);
}
如何通過   typedef   把函數聲明為一個自定名,然後再調用呢??

shawind 发表于 2007-12-26 12:13:48

我只知道这样的写法

#include "stdio.h"

void myFun(int x)
{
    printf("%d\\n",x);
}

#define mf(x) myFun(x)

int main(){
    myFun(1);
    mf(2);
    return 0;
}

august 发表于 2007-12-26 13:10:10

下面我们来看一下函数指针类型的定义及使用:(请与上对照!)
//自行包含头文件
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;
//……

這是網上找到的,不過不太懂,試過牠那樣寫好像不行

shawind 发表于 2007-12-26 14:14:21

是可以的吧,因为已经申明了一个函数指针类型了,简化下他的写法就是


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

august 发表于 2007-12-26 14:27:04

哦     原來這樣,偶一直沒看清楚
原來typedef void (*FunType)(int );
是以 FunType 這個作為類型名了, 那樣跟  typedef   int    INT   區別還是比較大的。。。

lw 发表于 2007-12-26 19:45:36

是一模一样嘛- -……
没区别……

coolpay64 发表于 2007-12-26 20:32:12

有分別吧 INT好像有某種跨平台的意義吧

啊...某上浮了

shawind 发表于 2007-12-26 20:49:24

typedef只是个别名而已。

ps.不知道LS潜在水里摸到了多少鱼

duzhi5368 发表于 2008-1-7 18:49:36

引用第6楼coolpay64于2007-12-26 20:32发表的:
有分別吧 INT好像有某種跨平台的意義吧

啊...某上浮了

BINGO^ ^
页: [1]
查看完整版本: 關於 typedef 對函數的使用