2009-12-18 60 views
0

就是下面這兩者之間的區別:函數指針查詢

typedef void (*my_destructor)(void *); 

typedef void (*my_destructor)(void *) my_func_ptr; 

是第二個有效嗎?

+2

編譯器在編譯時說什麼?你認爲它應該做什麼? – 2009-12-18 17:04:02

回答

7

第一個聲明稱爲my_destructor的類型。這種類型是指向一個函數的指針,其參數類型爲void*,並且不返回任何內容。

第二個是無效的,你想要做什麼?如果你想聲明my_destructor類型的變量,你必須這樣做:

typedef void (*my_destructor)(void *); 
my_destructor my_func_ptr; 
+1

或者只是'void(* my_func_ptr)(void *);',如果你想聲明一個該類型的變量而不命名該類型。但是實際上你應該命名函數指針類型,因爲在整個地方重複它們都是很容易出錯的麻煩。 – 2009-12-18 17:16:57

1

您聲明爲指針功能的類型。 第一個是好的,它意味着你有一個名爲my_destructor的類型,它是一個指向函數(*my_destructor)的指針,它在參數上使用空指針(void *),並且不返回任何內容(void)。

現在你可以使用你的類型,就好像它是另一種類型,比如char,long或者其他類型。