簡體   English   中英

將函數數組作為函數的參數傳遞

[英]Passing array of functions as argument to function

我的C有點生銹。 假設我有以下內容

char* (*funcs[n])(void);

我將如何定義或聲明另一個函數將此數組作為參數。 我嘗試過

void func(char* (*p)(void));

但是海灣合作委員會抱怨。

該參數與數組具有相同的類型,但可以省略大小:

void print(char* (*p[])(void)) { ... }

您還可以使用數組衰減為指針的事實並聲明:

void print(char* (**p)(void)) { ... }

這些功能簽名是等效的。 在函數中,使用以下任一函數調用函數:

char *a = (*p)();
char *b = (p[0])();

這些調用也是等效的。

但是,正如user694733在注釋中指出的那樣,通過為特定簽名的函數創建一個typedef ,一切將變得更加容易,例如:

typedef char *(*Charpfunc)(void);

然后,您可以對數組和函數參數使用熟悉的語法:

char *hello(void) { return "hello"; }
char *howdy(void) { return "howdy"; }
char *goodbye(void) { return "goodbye"; }

typedef char *(*Charpfunc)(void);

void print(Charpfunc *p)
{
    while (*p) {
        puts((*p)());
        p++;
    }
}

int main()
{
    Charpfunc funcs[] = {
        hello, howdy, goodbye, NULL
    };

    print(funcs);
    return 0;
}

暫無
暫無

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

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