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