搞不懂,这样的函数:status = (*pHndl->pFncTable->pRun)(pHndl, pPrm)是怎么一回事?

fohonet 2007-05-18 04:12:09
搞不懂,这样的函数:status = (*pHndl->pFncTable->pRun)(pHndl, pPrm)

是如何定义,运用的 ?

哪里有这样类似的例子?
...全文
196 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fohonet 2007-05-18
  • 打赏
  • 举报
回复
yoyo_alex_lw() ( ) 信誉:100 Blog 加为好友 2007-05-18 16:45:52 得分: 0


怎么可能找不到原型?首先,光标放在pHndl上,右键,查看声明,在找到的声明语句上,将光标放在pHndl声明的类型上,在右键查看声明,如此,在来一次,就可以了.


========================

声明是可以看到的,但是*pHndl->pFncTable->pRun 所指向的函数刚才没有找到

刚才看了下 应该是对 pHndl->pFncTable赋值来实现的,还是猜测,等待验证。
jixingzhong 2007-05-18
  • 打赏
  • 举报
回复
简单示例一下,
其实就结构体指针pHndl,其成员中有一个pFncTable结构体指针,
这个pFncTable结构体指针指向的结构体中有一个 pRun 成员,
pRun 成员它是一个函数指针。

这样,pHndl->pFncTable->pRun 获得函数入口地址,
(*pHndl->pFncTable->pRun)(pHndl, pPrm) 就是调用这个被指向的函数而已 ...
jixingzhong 2007-05-18
  • 打赏
  • 举报
回复
比如:

#include <stdio.h>
#include <stdlib.h>

int fun(struct Handl *pHndl , int n)
{
return n>0;
}

struct Handl
{
struct FncTable *pFncTable;
/*... other members*/
};


struct FncTable
{
int (*pRun)(struct Handl *, int);
void (*pExit)(void);
/*... other members*/
};
int main()
{
int status, pPrm=2;
struct Handl h1, *pHndl;
struct FncTable ftable;
ftable.pRun=fun;

h1.pFncTable=&ftable;
pHndl=&h1;
status = (*pHndl->pFncTable->pRun)(pHndl, pPrm);
printf("status = %d\n", status);
system("pause");
return 0;
}
yoyo_alex_lw 2007-05-18
  • 打赏
  • 举报
回复
怎么可能找不到原型?首先,光标放在pHndl上,右键,查看声明,在找到的声明语句上,将光标放在pHndl声明的类型上,在右键查看声明,如此,在来一次,就可以了.
fohonet 2007-05-18
  • 打赏
  • 举报
回复
又看了下,明白了。

pHndl->pFncTable被赋值一同类型的结构体,

此结构体含有三个指针成员,

*pHndl->pFncTable->pRun 就是指向其中一成员所指向的函数。
iu_81 2007-05-18
  • 打赏
  • 举报
回复
怎么可能啊
  • 打赏
  • 举报
回复
你找找 怎么给 pRun 赋值 的?
这是一个指针当然不需要原型了
fohonet 2007-05-18
  • 打赏
  • 举报
回复
是这样的,
此处事调用,

可我竟然找不到此函数的原型,怎么办?
  • 打赏
  • 举报
回复
猜测
pHndl是结构体或者类指针,
pFncTable又是一个结构体或者类指针
pRun函数指针
(pHndl, pPrm)函数的两个参数

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧