首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数赋给函数指针

将函数赋给函数指针
EN

Stack Overflow用户
提问于 2015-09-14 21:04:20
回答 2查看 322关注 0票数 0

下面给出了一个理解回调函数和函数pointers.The程序的测试程序。

我的问题是在分配

代码语言:javascript
复制
cb_display = (void*)display_struct;

我必须将函数转换为void*。为什么在函数的返回类型为空时也需要这样做?

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    int a;
    char b[16];
}myst_t;

void (*cb_display)(void*);

void display_struct(myst_t *st){
    fprintf(stdout, "a -> %d b -> %s \n",st->a,st->b);    
}

int main()
{
    myst_t myst;
    myst.a = 789432;
    strncpy(myst.b,"helloabcd",9);

    cb_display = (void*)display_struct;

    cb_display(&myst);

    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-14 21:08:46

代码语言:javascript
复制
cb_display = (void*)display_struct;

实际上在C中也是无效的。不能将void *分配给函数指针。

若要解决问题,请将函数指针声明为:

代码语言:javascript
复制
void (*cb_display)();

这意味着它匹配一个函数,该函数不返回值,并接受未指定数量的参数。那你就不需要任何演员了。另外,请注意,正如Olaf在注释中指出的那样,带有()的函数声明器虽然有效,但它是一个过时的C特性。

当然,如果只传递带有display_struct参数的函数(如myst_t * ),也可以将cb_display声明为:void (*cb_display)(myst_t *);

票数 3
EN

Stack Overflow用户

发布于 2015-09-22 01:26:50

变化空洞(Cb_display)(无效);

(cb_display)( void );

可能会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32573922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档