晃晃悠悠

isrobert

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  12 随笔 :: 0 文章 :: 34 评论 :: 0 Trackbacks
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿(0)

随笔分类

随笔档案

文章档案

相册

收藏夹

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

在vckbase上别人问的一道题。

下面的声明令人非常的困惑,哪位能详细的解释一下,并给出类比的例子,使得理解更加容易

int(*func())();

int(*func())[];

int(*foo[])();

我的解释是:
1,func函数返回一个指向int返回类型,无参数函数的指针
2,func函数返回一个数组指针
3,定义了一个函数指针类型的数组


他让我详细说一下,我就想把各个定义才开了说。有的描述我觉得对,有的描述,感觉比较牵强,记录下来,大家看看,如果有不对的希望指正。

1,实际上可以这么看//比较满意
int (*p)();
p = func;

2,可以这么看//有点牵强:)
int[] (*p)();//不知道是否符合语法,个人感觉不符合,但可以帮助理解
p = func;

3,可以这么看//也有点牵强
我无法用代码描述。。。
int (*p)();
p实际上是一个数组中的一项,这个数组中存放的都是这类函数(int (*)();)的函数指针。


对于我以上的看法,如果有什么不同意见,可以留言给我,大家讨论讨论~
posted on 2007-01-26 17:30 isrobert 阅读(1777) 评论(2)  编辑 收藏

评论

# re: 20070126--函数指针的问题 2007-01-26 19:27 hpho
用typedef解释比较易理解, 前提是知道typedef是什么一回事.
int(*func())();
\\typedef int (*RETYPE) ();
\\RETYPE func();

int(*func())[];
\\typdef int (*RETYPE)[];
\\RETYPE func();

int(*foo[])();
\\typedef int (*TYPE) ();
\\TYPE foo[];



# re: 20070126--函数指针的问题 2007-06-01 23:10 xb

void        *(*currState)()    =    &process_m;

    do{
        if ( (currState=(void *(*)())currState()) == NULL ) exit(1);
    }while ( currState != &process_k );
或者
    do{
        currState=(void *(*)())currState();
    } while ( currState );

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]