2011-05-11 70 views
2

我有一个关于C的问题,希望那些愿意分享他们的知识的人会很感激。调用C中的结构成员

在我读代码的时候,我被困在一个结构中,它的成员被调用的方式是我以前从未见过的。 代码基本上是以下:
代码来调用该结构构件

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构件应该是一个指针,带两个参数不是吗? howcome struct_name可以调用“cb”,而不是(* cb有2个参数)?

谢谢你的好意响应

回答

0

CB成员是一个函数指针,它接受两个参数并返回int。您感到困惑的调用是分配一个指针值,因此不需要引用这些参数。对该函数的调用将使用参数gzw.cb(p1,p2)

1

cb函数指针。您可以将它指定为指向其原型(即参数编号,类型和返回类型)与函数指针类型的函数相匹配的任何函数。

然后,您可以通过调用该函数指针功能,如:

gzw.cb(arg1, arg2); 
+0

+1但我更喜欢写'国资委* CB(ARG1,ARG2);'写一个更轻便的代码。 – Mahesh 2011-05-11 17:29:12

+0

@Mahesh:那更便携?事实上,我认为这甚至不是有效的C语法。 – 2011-05-11 17:30:46

+0

顺便说一下,我应该写'(gzw。* cb)(arg1,arg2);'。我在准备这个主题时阅读了本教程。请告诉我,如果这是过时的信息。 http://www.newty.de/fpt/fpt.html#callconv – Mahesh 2011-05-11 17:41:49

0

这是一个函数指针。基本上,您可以为结构分配一个函数,就像分配任何其他值一样。

0

是的,cb是一个函数指针,它接受两个参数并返回一个int。

这是不正确的说“struct_name 呼吁cb”相反,该结构包含一个函数指针,你可以用gzw.cb(arg1, arg2);调用。

0

是的你是对的。成员变量cb是一个函数指针变量,取一个struct struct_name*和一个整数作为输入并返回一个int。

要叫你不得不做这样的事情的函数:

int ret = gzw.cb(&gzw, 10); 
+0

该语法不正确。 – 2011-05-11 17:29:20

+0

纠正它。抱歉 – Constantinius 2011-05-11 17:30:14