[英]Typedef with function pointers in C?
我對C還是很陌生,在閱讀和理解這一行代碼時我真的很難受:
typedef void (*getnxtbyte_t)(void *stream);
通過環顧四周,我現在知道它是指向函數的指針。 但是有人可以幫我進一步澄清這一點嗎? 這種新類型的名稱是什么? 它指向什么功能? 函數的參數(void* stream)
嗎?
提前致謝!
這是一個難以掌握的語法。
這種新類型的名稱是什么?
類型是getnxtbyte_t
。 (您可以將尾隨_t
讀為“類型”。這是一種流行的約定。)
getnxtbyte_t
類型的變量可以保存帶有一個void *
參數且返回類型為void
的函數的地址。
它指向什么功能?
錯誤的問題。
該代碼僅定義類型。 沒有創建任何變量,因此沒有“它”指向任何東西。
如果您知道具有正確簽名的函數,例如:
void some_func(void*) {}
您現在可以使用該typedef創建指向它的指針:
getnxtbyte_t my_function_pointer = some_func;
此typedef
創建一個名為getnxtbyte_t
的類型。 該類型用於指向返回void
(即無結果)的函數的指針,如第二個單詞所示。 該函數采用單個參數,即void *
,由stream
。
因此,如果您的函數帶有這樣的聲明:
void some_function(void *any_name);
然后,您可以像在帖子中那樣使用typedef
:
void *some_param = NULL;
typedef void (*getnxtbyte_t)(void *stream); // declare typedef
getnxtbyte_t func = some_function; // assign
func(some_param); // call
函數指針類型的名稱為getnxtbyte_t
。 它不指向任何東西了-這是一個類型的指針,而不是實際的指針。 就像在說
typedef struct foo {int x;} Foo;
您定義類型Foo
,但沒有該類型的實際實例。 最后,是的,該函數接受單個void*
參數,並返回void
。
我也是C語言的新手,所以如果有任何錯誤,請糾正我。
指向函數的指針的格式如下:
datatype (*POINTER_NAME)(PARAMETERS);
這就是指針函數返回的數據類型 , 指針的名稱以及指針函數需要的參數 。
與普通函數聲明相比,函數指針的外觀如下:
// normal function declaration
void getnxtbyte_t(void *stream);
// function pointer
void (*getnxtbyte_t)(void *stream);
typedef
允許我們創建自己的類型。
// will create a type called getnxtbyte_t
typedef void (*getnxtbyte_t)(void *stream);
至此,我們只聲明了一個類型。 我們沒有指向任何東西。 因此,讓我們創建一個名為func_ptr
的指針並將其指向一個函數。
// func_ptr is a pointer of type getnxtbyte_t
getnxtbyte_t func_ptr = another_function;
// calling func_ptr is now the same as calling another_function
func_ptr(an_argument);
// had we not used typedef, we would type:
void (*getnxtbyte_t)(void *stream) = another_func;
getnxtbyte_t(an_argument);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.