簡體   English   中英

Typedef與C中的函數指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM