幻想森林

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

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

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-12-26 11:22:30 | 显示全部楼层 |阅读模式
有typedef   int     INT     知道可以這樣用
  但如果我有這樣一個函數
void   myFun(int   x)
{
      printf("%d\n",x);
}
如何通過   typedef   把函數聲明為一個自定名,然後再調用呢??[s:3][s:3]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 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. }
复制代码
え~え~お!!!
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 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]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 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. }
复制代码
え~え~お!!!
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-12-26 14:27:04 | 显示全部楼层
哦   [s:5]  原來這樣,偶一直沒看清楚
原來typedef void (*FunType)(int );
是以 FunType 這個作為類型名了, 那樣跟  typedef   int    INT     區別還是比較大的。。。 [s:4]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-12-26 19:45:36 | 显示全部楼层
是一模一样嘛- -……
没区别……
Style-C
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-12-26 20:32:12 | 显示全部楼层
有分別吧 INT好像有某種跨平台的意義吧

啊...某上浮了

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-12-26 20:49:24 | 显示全部楼层
typedef只是个别名而已。

ps.不知道LS潜在水里摸到了多少鱼 [s:2]
え~え~お!!!
回复 支持 反对

使用道具 举报

7

主题

190

帖子

1766

积分

⑥精研

....

积分
1766
发表于 2008-1-7 18:49:36 | 显示全部楼层
引用第6楼coolpay64于2007-12-26 20:32发表的  :
有分別吧 INT好像有某種跨平台的意義吧

啊...某上浮了

BINGO^ ^
萝卜啊,白菜啊,土豆星啊,梦想有爱啊。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 02:09 , Processed in 0.029197 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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