c - 如何使用位于结构中的函数指针运行函数?(C)
问题描述
我想基于一个结构定义创建一个结构数组,并用不同的 int 值初始化每个结构。
然后,我想使用function pointer
指向 a 的a 打印这个值print function
。
定义一个结构(包括一个 int 和一个函数指针)。
创建一个包含 10 个相同定义的结构的数组。
为它们中的每一个设置不同的值。
为同样位于结构中的函数指针指向的函数发送此值
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE 10
void Print(int num);
typedef struct print_me
{
int x;
void (*Print)(int x);
};
struct print_me my_prints[ARRAY_SIZE];
int main()
{
size_t i = 0;
for (i = 0; i < ARRAY_SIZE; ++i)
{
my_prints[i].x = i;
my_prints[i].Print(my_prints[i].x);
}
return 0;
}
void Print(int num)
{
printf("%d\n",num);
}
我仍在学习 and 的概念function pointer
,structs
所以我很高兴能得到一些提示和建议,帮助我理解我在这里的错误。
谢谢。
解决方案
与通常的指针一样,您必须先设置一个指针值才能使用它。所以它指向某个地方。
添加:
my_prints[i].Print = &Print;
// or, it means the same, & is optional
// my_prints[i].Print = Print;
my_prints[i].Print(my_prints[i].x); // now ok
在调用之前,my_prints[i].Print()
以便指针在调用之前指向函数Print
。
附注一个有趣的事实:由于奇怪的 C 规则,不需要取消引用函数指针,您甚至可以多次“取消引用”函数指针,例如(****my_prints[i].Print)()
. 见前这个问题。
推荐阅读
- php - Symfony - 将实体设置为多对一
- r - R Shiny - Highcharts:显示前的工具提示延迟
- python - 在 django 中将 UserFilter 导入为 urls.py
- c# - ASP.NET Core 中的单元测试密码验证器
- json - Angular6 JSON - 元素“......未定义”
- regex - 正则表达式匹配不同的分隔符
- python-3.x - 从特定父母那里获取标签属性
- sql - 如何验证视图表单中的输入数据?
- events - 使用 JavaFX TreeView 拖放
- python-2.7 - 类内的 ctypes 共享库函数的多处理失败