如何使用位于结构中的函数指针运行函数?(C)

如何使用位于结构中的函数指针运行函数?(C),c,function,struct,printf,function-pointers,C,Function,Struct,Printf,Function Pointers,我想基于一个结构定义创建一个结构数组,并用不同的int值初始化每个结构 然后,我想打印这个值,使用一个指向打印函数的函数指针 定义包含int和函数指针的结构 创建一个包含10个相同定义的结构的数组 为它们中的每一个设置不同的值 为函数指向的函数发送此值 也位于结构中的指针 这是我的代码: #include <stdio.h> #include <stdlib.h> #define ARRAY_SIZE 10 void Print(int num); typedef s

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

然后,我想打印这个值,使用一个指向打印函数的函数指针

定义包含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);
}
我还在学习函数指针和结构的概念,所以我很高兴能得到一些提示和建议,帮助我理解这里的错误


谢谢。

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

加:

在调用my_prints[i]之前,请先打印,以便指针在调用函数Print之前指向函数Print


附带一个有趣的事实:由于奇怪的C规则,不需要取消引用函数指针,您甚至可以多次取消引用函数指针,如****my_prints[i].Print。参见ex.

对于初学者,在此声明中使用typedef说明符没有任何意义

typedef struct print_me
{
    int x;
    void (*Print)(int x);
};
不指定typedef名称。你可以写一个例子

typedef struct print_me
{
    int x;
    void (*Print)(int x);
} print_me;
for (i = 0; i < ARRAY_SIZE; ++i)
{
    my_prints[i].x = i;
    my_prints[i].Print = Print;
}
在for循环中,需要使用函数Print的地址初始化数据成员Print。比如说

typedef struct print_me
{
    int x;
    void (*Print)(int x);
} print_me;
for (i = 0; i < ARRAY_SIZE; ++i)
{
    my_prints[i].x = i;
    my_prints[i].Print = Print;
}
然后在第二个for循环中,您可以调用如下函数

for (i = 0; i < ARRAY_SIZE; ++i)
{
    my_prints[i].Print( my_prints[i].x );
}

谢谢如果我添加my_prints[i]。Print my_prints[i]。x;就在两行初始化之后,只加一个循环?编辑:通过在第一次初始化后添加打印行,它只处理一个循环lines@NoobCoder你能做到。但是,当代码在逻辑上被分成执行一项任务的部分时,效果更好。在这种情况下,与将所有逻辑放在一个堆中的代码相比,代码的可读性更强。谢谢。我是否可以使用而不是for循环一段时间*my_prints?@NoobCoder数组不包含哨兵值。例如,可以使用while循环,如while i