2011-02-11 89 views
3

我使用這個資源來幫助我函數指針:here但是在這個代碼(寫在下面),對GCC編譯說:誤差函數指針

line 15: warning: dereferencing 'void*' pointer 
line15:error:called object *foo is not a function 

的代碼是在這裏:

#include<stdio.h> 
#include<stdlib.h> 
#include<pthread.h> 

void print_mess(void *ptr) 
{ 
     char *message = ptr; 
     printf("%s\n",message); 
} 
void main() 
{ 
     void* foo = print_mess; 
     char *mess = "Hello World"; 
     (*foo)((void*)mess); 
} 

非常簡單的測試功能,刷了我的知識,我很尷尬,甚至會遇到這樣的問題,更不用說張貼在SO。

回答

4

你的指針是錯誤的類型。您需要使用:

void (*foo)(void *) = print_mess; 

它看起來很奇怪,但這是一個函數指針定義。您也可以鍵入以下內容:

typedef void (*vp_func)(void *); 
vp_func foo = print_mess; 
+2

賓果,這是正確的答案。 – 2011-02-11 04:13:51