我的程序中包含以下文件,带有某些函数定义的头,以及带有函数主体的程序。

something.h

typedef struct _foo {
 int id;
 int lucky_number;
} foo;

typedef void (*pointer_fc)(foo *);

void first(foo *);

void second(foo *);

void third(foo *);

extern pointer_fc fc_bases[3];

something.c

pointer_fc fc_bases[] = {first, second, third};

/* body of functions */

请注意,在标头中,我定义了一个指向函数的指针数组,在something.c程序中,函数与该数组的每个元素相关联。

假设在某个时刻我需要在main.c程序中调用所有3个函数。 这样,我如何使用指针的extern数组在main.c调用此函数。

===============>>#1 票数:1

如果f1作为foo结构的结构指针变量声明如下,

foo *f1;

然后,您可以按以下方式调用函数first()和second(),

pointer_fc fc_bases[] = {first, second};

(*fc_bases[0])(f1);

(*fc_bases[1])(f1);

===============>>#2 票数:1 已采纳

调用函数指针时,它们会自动取消引用,因此它非常简单

foo f;
fc_bases[0](&f);
fc_bases[1](&f);
fc_bases[2](&f);

  ask by SealCuadrado translate from so

未解决问题?本站智能推荐:

1回复

函数在C头文件中声明两次

我知道带有#ifdef的C头文件的声明以及变量和函数之前的extern的含义。 但最近我有一个嵌入式设备的第三方库,具有以下方案: 另外我有一个相应的C源文件: 所以我在这里有点困惑。 以这种方式在头中声明所有函数两次的原因是什么?
2回复

使用C中的函数指针访问外部函数

我试图使用指向它的指针链接到外部函数。 但是每次尝试时,我都会得到编译器错误,即未声明extern函数。 我对外部功能的经验很少,因此看不到我的错误。 我有一个在lcd.c中声明的函数,我试图从一个单独的文件memory.c中获取该函数。 在编写仿真器时,我需要使用函数指针,并且我有
3回复

如何在头文件和c文件中声明函数指针?

我对如何在头文件中声明函数指针感到困惑。 我想在main和一个名为menus.c的文件中使用它,并在menus.h中声明它。我假设。 我们想要初始化以指向某个功能。 它看起来像这样: 我们在menus.c,menus.h和main中写了什么?
1回复

如何在C ++中声明extern类指针?

以下内容在cpp文件中声明为变量,但出现错误,因此进行了研究,发现需要在头文件中声明它。 因此,如何在头文件中声明和extern类指针
2回复

使用extern将数组与指针链接

假设我有两个文件:file1.c-包含大小为10的int数组的全局定义,该数组名为“ array [10]”。 file2.c-包含一个名为“ extern int * array”的int指针,在这里我试图将该指针链接到array。 但是,当我检查file1.c中数组的地址和file2
1回复

在C中的头文件中定义外部函数(模块)

当我编译下面概述的程序时,我收到以下错误 我已经尝试了很多东西,或多或少半盲,以使它工作。 我定义的struct parsed_CLI_I2C_t完美无瑕。 没有编译错误。 但是,当我尝试以相同的方式使用<usb.h>中的struct usb_device ,编译器并不
1回复

外部函数调用期间指针地址更改

我正在编写一个程序,其中C ++文件调用extern“C”函数以启动多个CUDA内核函数。 在调试代码时,我发现当我输入extern函数时,我的一个指针的目标地址会发生变化。 这是有问题的代码(在我的.cpp文件中): 并在.cu文件中: 这个输出是: 我试图解释
1回复

其他源文件中使用的结构

我有3个档案 在这里,我在头文件中声明了一个结构,并在另一个源文件中初始化了结构类型的变量。 实际上我想知道声明一个可以被多个源文件使用的结构的正确方法吗?
2回复

C和全局变量/函数

我正在移植一些我拥有的C ++代码。 它在C ++中可以完美地工作,所以我不知道自己在做什么错。 我有“ ac ”和“ bc ”。 它们都包含“ ah ”,而后者又包含“ bh ”。 “ bc ”中的函数在其头文件中声明(带有extern关键字),其中之一从“ ac ”中调用。 它可以
1回复

在c中使用“ extern”命令共享变量

这个问题已经在这里有了答案: 如何使用extern在源文件之间共享变量? 17个答案 我有以下代码: (1)extern_test.h: (2)extern_test.c: (3)extern_test2.c: 现在,当我在终端上编译