函数指针作为函数参数

wxdcxp 2010-07-16 05:57:44

#include <stdio.h>

typedef void (*Funchar) (char *);

void SetFun(Funchar pReadFun);
void GetNetIP(char * pNetIP);

int main(void)
{
SetFun(GetNetIP);
return 0;
}

void GetNetIP(char * pNetIP)
{


}

void SetFun(Funchar pReadFun)
{

}


项目中经常有看到如上类似的代码,有个地方不明白,希望大家指教下
SetFun(GetNetIP);

请问GetNetIP这个函数是有参数的,但是为什么调用它时却不需要参数也可以
...全文
505 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxdcxp 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 kitcaii 的回复:]
感觉你参数指针概念没搞清楚。函数指针就是一个很普通的指针变量,只是它保存函数的入口地址
SetFun(GetNetIP);执行到这里的时候,SetFun只需要一个函数指针也就是GetNetIP函数的入口地址,此时并没有调用GetNetIP函数,为何要给GetNetIP传参呢?


C/C++ code

void SetFun(Funchar pReadFun)
{
c……
[/Quote]

多谢指点,找到调用地方了
mymtom 2010-07-16
  • 打赏
  • 举报
回复

#include <signal.h>

void (*signal(int sig, void (*func)(int)))(int);

/* or in FreeBSD's equivalent but easier to read typedef'd version: */

typedef void (*sig_t) (int);

sig_t
signal(int sig, sig_t func);

mymtom 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lthyxy 的回复:]

引用 4 楼 cxz003 的回复:

楼上竟然是星星

我是水货,人人都知道,你别大惊小怪
[/Quote]
摘了星星,也没见散分庆祝一下!
kitcaii 2010-07-16
  • 打赏
  • 举报
回复
感觉你参数指针概念没搞清楚。函数指针就是一个很普通的指针变量,只是它保存函数的入口地址
SetFun(GetNetIP);执行到这里的时候,SetFun只需要一个函数指针也就是GetNetIP函数的入口地址,此时并没有调用GetNetIP函数,为何要给GetNetIP传参呢?


void SetFun(Funchar pReadFun)
{
char *p = "Hello world!";
(*pReadFun)(p);
}

(*pReadFun)(p);执行到这里时才调用了GetNetIP,可以给它传参了。

而你说的这些
Funchar getDataFun;
getDataFun = pReadFun;
只是指针的赋值,也没有函数调用,为何要给他们传参呢?

既然他们是全局的,肯定在某个地方执行了函数调用,此时才需要传参。。。
pengzhixi 2010-07-16
  • 打赏
  • 举报
回复
把你调用的代码发出来
wxdcxp 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 pengzhixi 的回复:]
引用 14 楼 wxdcxp 的回复:
引用 7 楼 kitcaii 的回复:
C/C++ code

#include <stdio.h>

typedef void (*Funchar) (char*);

void SetFun(Funchar pReadFun);
void GetNetIP(char * pNetIP);

int main(void)
{
Se……
[/Quote]

google 得到一篇http://topic.csdn.net/t/20020831/09/984795.html但是跟我问的不一样
帖子中给的例子void no_memory() 该函数是没参数的。我现在主要问题是GetNetIP这个函数是有参数的但是调用的时候却没有传递参数给它
pengzhixi 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wxdcxp 的回复:]
引用 7 楼 kitcaii 的回复:
C/C++ code

#include <stdio.h>

typedef void (*Funchar) (char*);

void SetFun(Funchar pReadFun);
void GetNetIP(char * pNetIP);

int main(void)
{
SetFun(GetNetIP);
retu……
[/Quote]

google void set_new_handler这个函数吧,你就知道了。
wxdcxp 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kitcaii 的回复:]
C/C++ code

#include <stdio.h>

typedef void (*Funchar) (char*);

void SetFun(Funchar pReadFun);
void GetNetIP(char * pNetIP);

int main(void)
{
SetFun(GetNetIP);
return 0;……
[/Quote]

并没有给pReadFun传递参数
id5320 2010-07-16
  • 打赏
  • 举报
回复
flash可以套用吗
pengzhixi 2010-07-16
  • 打赏
  • 举报
回复
你这个可以去google void set_new_handle(..)
wxdcxp 2010-07-16
  • 打赏
  • 举报
回复
SetFun并没有进行处理
SetFun 函数内容类似是如下内容,只是工程中Funchar getDataFun是全局的



void SetFun(Funchar pReadFun)
{
Funchar getDataFun;
getDataFun = pReadFun;
}




mars199 2010-07-16
  • 打赏
  • 举报
回复
3楼竟然是星星
sparrow081 2010-07-16
  • 打赏
  • 举报
回复
在setFunc(Getfunc); 这里调用的是 setFunc函数, Getfunc是作为了这此调用的一个参数。函数名也就是函数指针了。
pengzhixi 2010-07-16
  • 打赏
  • 举报
回复
char array[]="badf";
void SetFun(Funchar pReadFun)
{
pReadFun(array);
}
kitcaii 2010-07-16
  • 打赏
  • 举报
回复

#include <stdio.h>

typedef void (*Funchar) (char*);

void SetFun(Funchar pReadFun);
void GetNetIP(char * pNetIP);

int main(void)
{
SetFun(GetNetIP);
return 0;
}

void GetNetIP(char * pNetIP)
{
printf("%s\n", pNetIP);
}

void SetFun(Funchar pReadFun)
{
char *p = "Hello world!";
pReadFun(p);
}


当然是SetFun调用GetNetIP的时候传参~
liutengfeigo 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cxz003 的回复:]

楼上竟然是星星
[/Quote]
我是水货,人人都知道,你别大惊小怪
silenceburn 2010-07-16
  • 打赏
  • 举报
回复
setfun写完整大概是这样:
void SetFun(Funchar pReadFun)
{
char c = 'a';
(*pReadFun)(a);
}

LZ明白了吗?
  • 打赏
  • 举报
回复
楼上竟然是星星
liutengfeigo 2010-07-16
  • 打赏
  • 举报
回复
那个函数并不要调用函数GetNetIP()函数,想传这个函数指针过去。在 SetFun再处理吧
wxdcxp 2010-07-16
  • 打赏
  • 举报
回复
能说具体点吗,如何将参数传给GetNetIP函数,最好能给个例子
加载更多回复(1)

70,023

社区成员

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

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