2011-07-28 72 views
1

我有函數指針如下初始化函數指針時出現問題?

void (*stream) (const char *) 

和IM初始化指針如下:

char dumpBuffer[512]; 
snprintf (dumpBuffer, sizeof (dumpBuffer), "<Pcm_DigitalIoChannelList>\n"); 
stream (dumpBuffer); 

可以在任何告訴我的是正確的?

在此先感謝。

+2

您顯示的代碼不會初始化指針。它試圖首先使用它,而不是初始化它,這是未定義的行爲。 –

+0

投票結束,因爲編輯使這個廢話。 – pmr

+0

回滾到更早的編輯? – UncleBens

回答

2

不大,一般你必須定義函數指針,如:

typedef void (*stream) (const char*); 

然後將其分配給一個函數:

stream myStream = &somefunction; 

,那麼你可以簡單地運行它:

myStream(pSomeBuffer); 
+0

爲什麼*必須* OP定義一個'typedef'? –

+0

+1。多數民衆贊成使用的最好方法 – Gasim

+0

這不是必要的,但我建議它代碼可讀性。無論如何,你只需將上面提到的void(* stream)(const char *)直接賦值給一個函數即可 – Fed44

3

要初始化這個指針,你必須分配一個函數的地址和一個兼容的簽名給它:

void foo(const char *) { 
    // do stuff 
} 

void (*stream) (const char *) = &foo; 

這將工作太,因爲功能將自動晉升爲指針:

void (*stream) (const char *) = foo; 

然後你可以使用它,你看到前面。