[英]Struct with pointer to function
您能否详细解释结构中的这一行代码:有一个指向 function 的指针,但为什么要将它引用到结构中?
void (*function)(struct Structure *);
这是什么意思
(struct Structure *)?
(struct Structure *)
这意味着 function 有一个struct Structure *
参数。 实际上,使用(struct Structure *variable of struct)
会更有意义。 这样就可以用一个指针指向一个struct,应该把struct变量的地址放到function中。
#include <stdio.h>
typedef struct circle{
int rad;
int area;
} Circle;
void ShowCircleInfo(Circle *info)
{
printf("rad value: %d\n", info->rad);
printf("area value: %d", info->area);
}
int main(void)
{
Circle circle_one;
circle_one.rad = 2;
circle_one.area = 3;
ShowCircleInfo(&circle_one);
return 0;
}
void (*function)(struct Structure *);
将function
声明为指向 function 的指针,该指针具有struct Structure *
类型的参数并且不返回值。
例如
#include <stdio.h>
struct Structure {
int a;
void (*function)(struct Structure *);
};
void foo(struct Structure *a) {
if (a->function == NULL) a->function = foo;
a->a++;
printf("%d\n", a->a);
}
int main(void) {
struct Structure a = {42, foo};
struct Structure b = {0}; // don't call b.function just yet!!
a.function(&b); // foo(&b)
b.function(&a); // foo(&a)
}
查看运行在https://ideone.com/7E74gb的代码
在C、function指针声明中,与function头的结构几乎相同。 只有 function 名称会更改为包含一些括号和“*”,而 arguments 不会有名称,因为在使用指针时只有它们的类型很重要(我们不访问 arguments 的值,所以我们不需要他们的名字)。
它们基本上是这样的:
<return_value> (*<function_name>)(<argument_list>)
因此,例如 function 指针为 function
void swap(int* a, int* b);
将是
void (*swap_ptr)(int*, int*);
请注意,指针的名称位于 function 的名称位置,与普通指针声明相比看起来有点奇怪。
关于这个主题的优秀读物(你可以跳过 C++ 的东西): https://www.cprogramming.com/tutorial/function-pointers.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.