这是我在努力的代码。它基本上是在现有代码中提供的。 有人可以解释一下吗?
typedef struct a* (*b)(struct c* d);
答案 0 :(得分:3)
有一个著名的左右评估:从标识符开始,一直向左移动直到第一个括号,然后再向右移动,等等。
这给了我们
从b
开始:b
是…
向左走,找到指针:…指向…的指针
向右走,找到函数定义:…一个带有struct c* d
的函数…
向左走,找到函数定义的其余部分:…返回struct a*
。
因此b
是指向一个函数的指针,该函数采用struct c* d
并返回struct a*
。
答案 1 :(得分:1)
这行代码:
typedef
b
”:(*b)
a
结构上的指针:struct a*
(* b)c
结构上的指针作为参数:(struct c* d)
该参数名为d
,但是我认为可以从声明中删除此信息。
答案 2 :(得分:1)
typedef
是函数指针类型(b)。
诸如...的功能。
struct a * MyFunction( struct c* d );
具有与typedef相同的类型。
例如
b myPointer = MyFunction;
struct c d;
myPointer( &d );
答案 3 :(得分:1)
此typedef
为接受struct c*
并返回struct a*
的函数类型定义别名,该别名名为b
。以前是:
typedef struct a* (*b)(struct c* d);
^
return type, pointer to struct a
^
name of the function type alias
^
arguments to the function, a pointer to a struct c
答案 4 :(得分:1)
如果您没有将指针隐藏在typedef
后面,就会更加清楚:
typedef struct a* b (struct c* d);
其中struct a* b (struct c* d);
是普通的旧函数声明。使用typedef时,b
不会成为函数的名称,而是类型的名称。对于(*b)
,b
成为函数指针类型的名称。
如果我们使用上面发布的typedef
的版本,并且需要该类型的函数指针,则可以将其声明为b* ptr;
。而在您的代码中,您将编写b ptr;
却没有意识到该变量实际上是一个指针。
通常,将指针隐藏在typedef
后面是不好的做法,因为如果我们不这样做,则会得到更具可读性的代码。