我需要一个容器来保存某些数字的函数指针。 喜欢
1 = function add
2 = function sub
3 = function mult
等等。这是一个简单的中断处理程序,根据中断号,应该调用某个函数。 我认为我可以使用结构化列表来完成此操作,但我知道最大条目数量的大小。所以我想到了像
这样的字符串数组const char *functions[2];
a[0] = "add";
a[1] = "sub";
但后来我不知道如何进一步使用琴弦。 任何提示或想法?
提前致谢!
编辑:为了澄清,我在这里有两个重要的功能,一个,我想将一个函数指针与一个数字一起保存到某个容器中。另一个,它只是说"转到该容器中某个数字的功能"。所以第一个函数得到一个int数(比如从1到50)和一个指向函数的指针。那些应该保存在一起。然后第二个函数只获取一个int数作为参数,然后它应该调用与我的容器中的int数相关联的函数。我要问的是如何保存指向函数的指针和数字。EDIT2:我确实想保存函数指针。我想我可以将函数名称保存为字符串,然后将其用作函数名称,因为我不知道另一种方式。
答案 0 :(得分:1)
你必须存储函数指针,所以定义一个新的函数指针类型并创建一个数组。根据您的问题,所有函数都应该使用两个int
参数并返回int
,因此新类型应该是这样的:
typedef int (*operation_t)(int,int);
现在您可以创建一个operation_t
的数组。整个代码:
#include <stdio.h>
typedef int (*operation_t)(int,int);
int addInt(int n, int m) {
return n+m;
}
int subInt(int n, int m) {
return n-m;
}
int multipleInt(int n, int m) {
return n*m;
}
int main ()
{
const operation_t function_list[3] = {&addInt, &subInt, &multipleInt};
int i;
for(i = 0; i < 3; i++)
{
printf("inputs: 2 and 3 result: %d\n", function_list[i](2,3));
}
return 0;
}
输出:
请注意,因为它是一个数组,索引是0, 1, 2
。
要添加自己的ID,您可以使用函数指针和int
ID创建一个stuct。
typedef struct operation
{
int (*operation_p)(int,int);
int id;
} math_operation_t;
您甚至可以构建链接列表,并在定义第三个成员变量时动态添加函数,该变量应该是指向下一个元素的指针。
答案 1 :(得分:1)
如果要存储和使用函数指针,可以这样做:
// the functions you want to point to
int add(int a, int b) { do stuff }
int sub(int a, int b) { do some other stuff }
...
// declare and set a function pointer
int (*myFuncPtr) (int, int);
myFuncPtr = ⊂ // points to the function "sub". The & is optional
// now use it:
int result = myFuncPtr(23, 42);
函数指针的类型取决于返回值和要指向的函数的参数。
您可以更轻松地声明函数指针变量 通过使用typedef:
typedef int (*funcPtr) (int, int);
现在使用typedef声明并初始化一个函数指针,如下所示:
funcPtr myFuncPtr = &add;
当然,您现在可以将许多指针放入数组中 并通过索引访问它们:
funcPtr funcPtrs[] = { &sub, add }; // like i said, the ampersand is optional
int result = funcPtrs[0](23, 42);