簡體   English   中英

將函數分配給函數指針

[英]Assigning function to function pointers

我編寫了一個測試程序來了解回調函數和函數指針,該程序如下所示。

我的問題是在分配時

cb_display = (void*)display_struct;

我必須將函數void*轉換為void* 為什么即使函數的返回類型為void也需要這樣做?

#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;
}
cb_display = (void*)display_struct;

實際上在C語言中也是無效的。不要這樣做。 您不能將void *分配給函數指針。

要解決您的問題,請將函數指針聲明為:

void (*cb_display)();

這意味着它與一個不返回任何值且采用未指定數目的參數的函數匹配。 然后,您不需要任何演員表。 還請注意,正如Olaf在評論中所指出的那樣,有效時帶有()的函數聲明符是過時的C功能。

當然,如果你只會把喜歡的功能display_structmyst_t *參數,你也可以聲明cb_display為: void (*cb_display)(myst_t *);

更改void( cb_display)(void );

輸入def void( cb_display)(void );

可能會工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM