C 抽象函数指针
如何创建一个包含十个函数指针的数组?我有一个for循环,我想在每次迭代中设置一个指向不同函数的函数指针。因此:C 抽象函数指针,c,arrays,function-pointers,C,Arrays,Function Pointers,如何创建一个包含十个函数指针的数组?我有一个for循环,我想在每次迭代中设置一个指向不同函数的函数指针。因此: //pseudocode for i (0..10) function = array_of_functions[i]; //... 此代码: return_t (*array_of_functions[10])(arg1_t, arg2_t); 将“函数数组”声明为10个元素的函数指针数组,其中每个指向函数的指针接受arg1\u t和arg2\u t类型的两个参数,并返回
//pseudocode
for i (0..10)
function = array_of_functions[i];
//...
此代码:
return_t (*array_of_functions[10])(arg1_t, arg2_t);
将“函数数组”声明为10个元素的函数指针数组,其中每个指向函数的指针接受arg1\u t和arg2\u t类型的两个参数,并返回return\u t类型。替换类型并根据需要调整参数的数量。//为方便起见,请定义函数指针类型的别名
// Define alias for function pointer type for convenience
typedef void (*action)(int);
// Example function
void print(int) { ... }
action fs[10] = { print, ... };
for (int i = 0; i < 10; ++i)
{
action f = fs[i];
// Call it somehow
f(i * i);
}
类型定义无效(*动作)(int);
//示例函数
无效打印(int){…}
动作fs[10]={打印,…};
对于(int i=0;i<10;++i)
{
动作f=fs[i];
//不管怎么说
f(i*i);
}
最简单的方法是为函数创建一个typedef,然后用该类型声明一个数组。要为函数创建类型定义:typedef returntype(*typedefname)(argtype1,argtype2,…,argtypeN)代码>例如:
#include <stdio.h>
#include <stdlib.h>
typedef void (*functype)();
void func1()
{
//...
}
void func2()
{
//..
}
//...
void func10()
{
//...
}
int main(int argc, char* argv[])
{
functype array[] =
{
&func1,
&func2,
&func3,
&func4,
&func5,
&func6,
&func7,
&func8,
&func9,
&func10
};
// Use the array...
return 0;
}
#包括
#包括
typedef void(*functype)();
void func1()
{
//...
}
void func2()
{
//..
}
//...
void func10()
{
//...
}
int main(int argc,char*argv[])
{
functype数组[]=
{
&职能1,
&职能2,
&职能3,
&职能4,
&职能5,
&职能6,
&职能7,
&职能8,
&职能9,
&职能10
};
//使用数组。。。
返回0;
}
任何时候,当你不得不处理难看的函数指针语法时,最好使用typedef
#include <iostream>
void a(int i)
{
std::cout<<"a: "<<i<<std::endl;
}
void b(int i)
{
std::cout<<"b: "<<i<<std::endl;
}
typedef void (*fn)(int);
int main(int argc, char**argv)
{
fn foo[2];
foo[0] = a;
foo[1] = b;
for(size_t i = 0; i < sizeof(foo) / sizeof(foo[0]); ++i)
{
foo[i](i);
}
return 0;
}
#包括
无效a(int i)
{
标准::cout
其中T是每个函数的返回类型(所有函数自然返回相同的类型)。如果要存储指向具有不同数量/类型参数的函数的指针,则需要处理一些问题:
int foo(void) {...}
int bar(int x) {...}
int bletch(double y, double z) {...}
...
int (*array_of_functions[10])() = {foo, bar, bletch, ...};
如果是这样的话,您必须跟踪每个函数需要多少个参数和参数类型,以便正确调用它
事实上,我对函数指针类型的typedef有点失望;它们在简化的同时往往会模糊
int foo(void) {...}
int bar(int x) {...}
int bletch(double y, double z) {...}
...
int (*array_of_functions[10])() = {foo, bar, bletch, ...};