找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3207|回复: 8

[通用编程] 關於 typedef 對函數的使用

[复制链接]
发表于 2007-12-26 11:22:30 | 显示全部楼层 |阅读模式
有typedef   int     INT     知道可以這樣用
  但如果我有這樣一個函數
void   myFun(int   x)
{
      printf("%d\n",x);
}
如何通過   typedef   把函數聲明為一個自定名,然後再調用呢??[s:3][s:3]
发表于 2007-12-26 12:13:48 | 显示全部楼层
我只知道这样的写法
  1. #include "stdio.h"
  2. void myFun(int x)
  3. {
  4.     printf("%d\\n",x);
  5. }
  6. #define mf(x) myFun(x)
  7. int main(){
  8.     myFun(1);
  9.     mf(2);
  10.     return 0;
  11. }
复制代码
 楼主| 发表于 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;
//……

這是網上找到的,不過不太懂,試過牠那樣寫好像不行[s:4]
发表于 2007-12-26 14:14:21 | 显示全部楼层
是可以的吧,因为已经申明了一个函数指针类型了,简化下他的写法就是
  1. #include "stdio.h"
  2. void myFun(int x)
  3. {
  4.     printf("%d\\n",x);
  5. }
  6. typedef void(*ft)(int);
  7. int main()
  8. {
  9.     ft mf;
  10.     mf = &myFun;
  11.     myFun(1);
  12.     mf(2);
  13.     return 0;
  14. }
复制代码

也可以不用typedef,可以直接来申明一个像一般变量一样的函数指针
  1. #include "stdio.h"
  2. void myFun(int x)
  3. {
  4.     printf("%d\\n",x);
  5. }
  6. void(*mf)(int);
  7. int main()
  8. {
  9.     mf = &myFun;
  10.     myFun(1);
  11.     mf(2);
  12.     return 0;
  13. }
复制代码
 楼主| 发表于 2007-12-26 14:27:04 | 显示全部楼层
哦   [s:5]  原來這樣,偶一直沒看清楚
原來typedef void (*FunType)(int );
是以 FunType 這個作為類型名了, 那樣跟  typedef   int    INT     區別還是比較大的。。。 [s:4]
发表于 2007-12-26 19:45:36 | 显示全部楼层
是一模一样嘛- -……
没区别……
发表于 2007-12-26 20:32:12 | 显示全部楼层
有分別吧 INT好像有某種跨平台的意義吧

啊...某上浮了
发表于 2007-12-26 20:49:24 | 显示全部楼层
typedef只是个别名而已。

ps.不知道LS潜在水里摸到了多少鱼 [s:2]
发表于 2008-1-7 18:49:36 | 显示全部楼层
引用第6楼coolpay64于2007-12-26 20:32发表的  :
有分別吧 INT好像有某種跨平台的意義吧

啊...某上浮了

BINGO^ ^
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-11-6 16:44 , Processed in 0.010946 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表