LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3135|回复: 27

能实现( f() )() 吗?

[复制链接]
发表于 2009-4-21 19:18:59 | 显示全部楼层 |阅读模式
利用函数指针和指针函数能实现这样:
( f() )();
的函数调用吗?

其中,f()实现一次函数调用,然后f()返回一个函数指针,接着利用这个函数指针再进行一次函数调用。
发表于 2009-4-21 20:36:21 | 显示全部楼层
函数调用貌似不能返回函数指针
回复 支持 反对

使用道具 举报

发表于 2009-4-21 21:03:11 | 显示全部楼层
知道什么叫万能指针吗!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-21 21:53:15 | 显示全部楼层
Post by shaohao;1977617
知道什么叫万能指针吗!!
不就是Void型指针嘛,但你能弄成这样子吗?
( f() )();
回复 支持 反对

使用道具 举报

发表于 2009-4-22 04:05:36 | 显示全部楼层
當然可以,建議自己去試試
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 08:42:30 | 显示全部楼层
Post by khc;1977731
當然可以,建議自己去試試
当然试过了,编译都通不过,LS能给个例子么?
回复 支持 反对

使用道具 举报

发表于 2009-4-22 08:48:13 | 显示全部楼层
你把你試過的發上來吧
回复 支持 反对

使用道具 举报

发表于 2009-4-22 11:22:32 | 显示全部楼层
那样会无限循环的调用;因为返回的是指向自己的指针,返回时发生调用,然后周而复始
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 13:08:46 | 显示全部楼层
Post by khc;1977752
你把你試過的發上來吧

OK.这样的话:
#include  "stdio.h"

int * a(void);
int * b(void);
int * c(void);

int main(void)
{
        void * (* f)(void) = a;
        ( f() )();
        return 0;
}

int * a(void)
{
        printf("This is the 'a' function.\n");
        return b;
}

int * b(void)
{
        printf("This is the 'b' function.\n");
        return c;
}

int * c(void)
{
        printf("This is the 'c' function.\n");
        return a;
}

编译时会说:
error:called object 'f()' is not a function
回复 支持 反对

使用道具 举报

发表于 2009-4-22 13:17:40 | 显示全部楼层
你函数指针的定義方法錯了
回复 支持 反对

使用道具 举报

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

本版积分规则

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