繁体   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