2011-05-11 96 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