我对C有疑问,会感谢那些愿意分享知识的人。
当我正在阅读代码时,我在一个结构中遇到了绊脚石,其成员以我以前从未见过的方式被调用。
代码基本如下:
用于调用struct成员的代码
struct struct_name gzw;
gzw.cb = otherfunct;
结构定义如下
struct struct_name {
int bela;
unsigned int packet;
int (*cb)(struct struct_name *fd, unsigned int packet2);
};
我有点困惑,因为据我所知,cb成员应该是一个指针,有两个参数不是吗?如果struct_name可以调用“cb”,而不是(* cb有2个参数)?
感谢您的善意回复
答案 0 :(得分:1)
cb
是函数指针。您可以将其分配给任何其原型(即参数编号,类型和返回类型)与函数指针类型匹配的函数。
然后可以通过函数指针调用该函数,如下:
gzw.cb(arg1, arg2);
答案 1 :(得分:0)
这是一个函数指针。基本上,您可以为结构分配一个函数,就像分配任何其他值一样。
答案 2 :(得分:0)
是的,cb
是一个函数指针,它接受两个参数并返回一个int。
说“struct_name 调用 cb
”是不正确的。相反,该结构包含一个函数指针,您可以使用gzw.cb(arg1, arg2);
调用它。
答案 3 :(得分:0)
CB成员是一个函数指针,它接受两个参数并返回和int。您混淆的调用是指定指针值,因此不需要引用参数。调用该函数将使用参数gzw.cb(p1,p2)
。
答案 4 :(得分:0)
struct struct_name*
和整数作为输入并返回一个int。
要调用该函数,您必须执行以下操作:
int ret = gzw.cb(&gzw, 10);