gpt4 book ai didi

函数返回函数指针的 C 语法

转载 作者:太空狗 更新时间:2023-10-29 16:20:59 26 4
gpt4 key购买 nike

考虑以下类型定义:

typedef int (*f1)(float);
typedef f1 (*f2)(double);
typedef f2 (*f3)(int);

f2 是一个返回函数指针的函数。与f3 相同,但是函数的类型,即f3 返回的指针,是f2。如何在没有 typedef 的情况下定义 f3?我知道 typedef 是定义 f3 的更简洁、更容易理解的方法。但是,我在这里的目的是更好地理解 C 语法。

最佳答案

从您对 f1 的声明开始:

int (*f1)(float);

您希望 f2 成为一个指向返回 f1 的函数的指针,因此将上面声明中的 f1 替换为 的声明>f2:

int (*      f1     )(float);
|
+-----+-----+
| |
v v
int (*(*f2)(double))(float);

声明如下

        f2                   -- f2
*f2 -- is a pointer
(*f2)( ) -- to a function
(*f2)(double) -- taking a double parameter
*(*f2)(double) -- returning a pointer
(*(*f2)(double))( ) -- to a function
(*(*f2)(double))(float) -- taking a float parameter
int (*(*f2)(double))(float) -- returning int

您重复 f3 的过程:

int (*(*    f2    )(double))(float);
|
+---+----+
| |
v v
int (*(*(*f3)(int))(double))(float);

读作

          f3                           -- f3
*f3 -- is a pointer
(*f3)( ) -- to a function
(*f3)(int) -- taking an int parameter
*(*f3)(int) -- returning a pointer
(*(*f3)(int))( ) -- to a function
(*(*f3)(int))(double) -- taking a double parameter
*(*(*f3)(int))(double) -- returning a pointer
(*(*(*f3)(int))(double))( ) -- to a function
(*(*(*f3)(int))(double))(float) -- taking a float parameter
int (*(*(*f3)(int))(double))(float); -- returning int

关于函数返回函数指针的 C 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com