typedef void *(*TGuiHandle)(); 什么意思?

wangsiyuanoo 2009-04-21 02:29:43
typedef void *(*TGuiHandle)(); //是定义了一个函数指针么?
谁能够写的更让清楚一点
就是不要typedef
...全文
405 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2009-04-23
  • 打赏
  • 举报
回复
函数指针的声明使用方式:

<想要指向的函数之返回类型>(*函数指针的名称)<想要指向的函数之参数类型…>

如要想声明一个函数指针指向以下函数:

void print(int i)

{

std::cout << i << std::endl;

}

那么就可以如下操作:

void (*pFunction)(int);

然后如下用函数的地址给pFunction赋值:

pFunction = &print;

在然后,pFunction就可以和函数print一样使用了,比如,

pFunction(1);

等等。



函数引用的声明和使用方式:

<欲引用的函数之返回类型>(&函数引用的名称)<欲引用的函数之参数类型…>=<欲引用的函数的名称>,至所以如此,是引用在声明的时候必须同时初始化,引用不能指向空值。

如要想声明一个函数引用指向以下函数:

void print(int i)

{

std::cout << i << std::endl;

}

那么就可以如下操作:

void (&rFunction)(int)=print;

在然后,rFunction就可以和函数print一样使用了,比如,

rFunction(1);

等等。


请看:http://blog.csdn.net/pathuang68/archive/2009/04/14/4071672.aspx
newborn2012 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wangdian123456 的回复:]
定义了一个函数指针名字为TGuiHandle
这个函数没有参数
返回类型是void*
[/Quote]
正解!
wangdian123456 2009-04-21
  • 打赏
  • 举报
回复
定义了一个函数指针名字为TGuiHandle
这个函数没有参数
返回类型是void*
zgjxwl 2009-04-21
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int fun(int a, int b)
{
return a+b;
}
int main()
{
int (*pfun)(int,int);
pfun=fun;
cout<<pfun(3,4)<<endl;
cout<<(*fun)(5,6)<<endl;
cout<<fun(7,8)<<endl;

return 0;
}
zgjxwl 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wangsiyuanoo 的回复:]
map <long, TGuiHandle *> m_uiHandle
map <long, TGuiHandle *>::iterator it = m_uiHandle.find(command_index);
if (it != m_uiHandle.end())
{
TGuiHandle * function_p = (*it).second;

//下面三行看不懂什么意思?
void (*FunctionPionter)(void);
FunctionPionter = (void (__cdecl *)(void))function_p;
(*FunctionPionter)();

return true;
}
[/Quote]
1.定义函数指针
2.指针赋值
3.通过函数指针调用
alexhilton 2009-04-21
  • 打赏
  • 举报
回复
一个指向返回void *的函数的函数指针
wangsiyuanoo 2009-04-21
  • 打赏
  • 举报
回复
map <long, TGuiHandle *> m_uiHandle 
map <long, TGuiHandle *>::iterator it = m_uiHandle.find(command_index);
if (it != m_uiHandle.end())
{
TGuiHandle * function_p = (*it).second;

//下面三行看不懂什么意思?
void (*FunctionPionter)(void);
FunctionPionter = (void (__cdecl *)(void))function_p;
(*FunctionPionter)();

return true;
}
wangsiyuanoo 2009-04-21
  • 打赏
  • 举报
回复
map<long, TGuiHandle *> m_uiHandle
map<long, TGuiHandle *>::iterator it = m_uiHandle.find(command_index);
if (it != m_uiHandle.end())
{
TGuiHandle * function_p = (*it).second;

//下面三行看不懂什么意思?
void (*FunctionPionter)(void);
FunctionPionter = (void (__cdecl *)(void))function_p;
(*FunctionPionter)();

return true;
}
rainbow_free 2009-04-21
  • 打赏
  • 举报
回复
学习!
zgjxwl 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangsiyuanoo 的帖子:]
typedef void *(*TGuiHandle)(); //是定义了一个函数指针么?
[/Quote]
void *(*TGuiHandle)();
>>定义一个函数指针TGuiHandle,该指针指向返回类型为void*,(在C++中)空形参列表的函数
typedef void *(*TGuiHandle)();
>>上面定义的一个是函数指针类型,这里用typedef定义上面定义的那个函数指针类型的别名,只不过,它的别名也用的是TGuiHandle而已。
Jinhao 2009-04-21
  • 打赏
  • 举报
回复


void* GuiHandle()
{
std::cout<<"GuiHandle"<<std::endl;
return 0;
}

typedef void *(*TGuiHandle)();
TGuiHandle address = &GuiHandle;

void * result = address(); //调用的是 GuiHandle

Jinhao 2009-04-21
  • 打赏
  • 举报
回复

void* GuiHandle()
{
std::cout<<"GuiHandle"<<std::endl;
return 0;
}

typedef void *(*TGuiHandle)();
TGuiHandle address = &GuiHandle;
Jinhao 2009-04-21
  • 打赏
  • 举报
回复

void GuiHandle()
{
std::cout<<"GuiHandle"<<std::endl;
}

typedef void *(*TGuiHandle)();
TGuiHandle address = &GuiHandle;
wangsiyuanoo 2009-04-21
  • 打赏
  • 举报
回复
为什么不这样写呢:
typedef void*() (*TGuiHandle); //好像这样写更像是一个指向一个没有参数并且返回void *类型的函数
yhuib 2009-04-21
  • 打赏
  • 举报
回复
void * ( * TGuiHandle ) ( );
---------- ----------
变量或类型名 无参数的函数
---------------
是个指针
----------------------------------
是个指向无参数函数的指针
-----------------------------------------
所指向的函数返回值是指针
-----------------------------------------------
指针所指的类型是void

所以 TGuiHandle 是一个指向 无参数,返回值是void 指针 的 函数

FengRider 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangsiyuanoo 的帖子:]
typedef void *(*TGuiHandle)(); //是定义了一个函数指针么?
谁能够写的更让清楚一点
就是不要typedef
[/Quote]
typedef void * (*TGuiHandle)(); //申明一种函数指针,其返回值为void *类型
TGuiHandle testFun; //testFun是一个指向返回值为void *型,参数为空的函数指针。
比如,在test.dll里面有一个void * Test();
则可以这样来使用:
HINSTANCE hCommDll;
hCommDll = LoadLibrary("test.dll");
TGuiHandle testFun = (TGuiHandle)GetProAddress(hCommDll,"Test");
这样就可以把testFun函数当成Test()来使用了。
beyond071 2009-04-21
  • 打赏
  • 举报
回复
直接就void* (*TGuiHandle)();
xmanlin 2009-04-21
  • 打赏
  • 举报
回复
一楼解释很清楚. typedef void *(*TGuiHandle)(); (*TCuiHandle )一定结合, TCuiHandle一定为指针.
typedef void **TGuiHandle(); TCuiHandle()结合,TCuiHandle为函数.
jn989 2009-04-21
  • 打赏
  • 举报
回复
函数指针的声明格式:
函数返回值类型(*指针变量名)(参数类型列表)
或者是:
typedef 函数返回值类型 (*指针变量名)(参数类型列表)
所以那个是定义一个没参数的返回void指针的函数指针,原型:void *(*pf)();//pf为名,可以任意起
用的时候直接用TGuiHandle就可以了
pengzhixi 2009-04-21
  • 打赏
  • 举报
回复
typedef void *(*TGuiHandle)();表示TGuiHandle代表一个函数指针,这个指针指向一个没有参数并且返回void *类型的函数

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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