簡體   English   中英

指向函數的指針的語法,該函數返回C中的函數指針

[英]Syntax for a pointer to a function returning a function pointer in C

如何聲明一個返回另一個函數指針的函數的指針? 請與我分享語法和示例代碼段。

另外,在哪種情況下會使用返回函數指針的函數指針?

這對於typedef來說是微不足道的:

typedef int(*FP0)(void);
typedef FP0(*FP1)(void);

FP1是指向函數的指針類型,該函數返回FP0類型的函數指針。

至於什么時候這很有用,如果你有一個函數返回一個函數指針,你需要獲取或存儲一個指向這個函數的指針,這很有用。

如果你避免使用typedef ,那很難。 例如,考慮來自C標准的signal()

extern void (*signal(int, void (*)(int)))(int);

void handler(int signum)
{
    ...
}

if (signal(SIGINT, SIG_IGN) != SIG_IGN)
    signal(SIGINT, handler);

使用typedef,它更容易:

typedef void Handler(int);
extern Handler *signal(int, Handler *);

void handler(int signum)
{
    ...
}

if (signal(SIGINT, SIG_IGN) != SIG_IGN)
    signal(SIGINT, handler);

請注意,對於signal()函數,通常只需使用<signal.h>並讓系統擔心聲明它。

如果你不想要第二個typedef,

typedef float(*(*fptr_t)(int))(double)

這意味着“ 聲明fptr_t作為指向函數的指針(int)返回指向函數(double)返回float的指針 ”(fptr_t:int→(double→float))

暫無
暫無

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

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