就是下面這兩者之間的區別:函數指針查詢
typedef void (*my_destructor)(void *);
typedef void (*my_destructor)(void *) my_func_ptr;
是第二個有效嗎?
就是下面這兩者之間的區別:函數指針查詢
typedef void (*my_destructor)(void *);
typedef void (*my_destructor)(void *) my_func_ptr;
是第二個有效嗎?
第一個聲明稱爲my_destructor
的類型。這種類型是指向一個函數的指針,其參數類型爲void*
,並且不返回任何內容。
第二個是無效的,你想要做什麼?如果你想聲明my_destructor
類型的變量,你必須這樣做:
typedef void (*my_destructor)(void *);
my_destructor my_func_ptr;
或者只是'void(* my_func_ptr)(void *);',如果你想聲明一個該類型的變量而不命名該類型。但是實際上你應該命名函數指針類型,因爲在整個地方重複它們都是很容易出錯的麻煩。 – 2009-12-18 17:16:57
您聲明爲指針功能的類型。 第一個是好的,它意味着你有一個名爲my_destructor的類型,它是一個指向函數(*my_destructor)
的指針,它在參數上使用空指針(void *)
,並且不返回任何內容(void
)。
現在你可以使用你的類型,就好像它是另一種類型,比如char,long或者其他類型。
編譯器在編譯時說什麼?你認爲它應該做什麼? – 2009-12-18 17:04:02