首页 > 解决方案 > 如何使用位于结构中的函数指针运行函数?(C)

问题描述

我想基于一个结构定义创建一个结构数组,并用不同的 int 值初始化每个结构。

然后,我想使用function pointer指向 a 的a 打印这个值print function

这是我的代码:

#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 pointerstructs所以我很高兴能得到一些提示和建议,帮助我理解我在这里的错误。

谢谢。

标签: cfunctionstructprintffunction-pointers

解决方案


与通常的指针一样,您必须先设置一个指针值才能使用它。所以它指向某个地方。

添加:

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)(). 见前这个问题


推荐阅读