假设我有一个函数
int foo(void)
{
printf("Hello world");
}
我想用一个指向函数的指针来指向foo()
。
typedef int (*f_ptr)(void);
我会用其中哪一个案例来达到这个目的?
(A) f_ptr my_ptr = foo;
my_ptr();
(B) f_ptr * my_ptr = foo;
my_ptr();
现在,如果我有10个函数foo1(), foo2() .. foo10()
,并且我想把它们放在一个数组中,并使用指向函数的指针遍历数组,我该怎么做?
f_ptr my_functions[10] =
{
foo1,
foo2,
..
foo10,
};
(A) f_ptr my_ptr = my_functions;
(B) f_ptr * my_ptr = my_functions;
for (int x = 0; x < 10; x++)
{
my_ptr();
my_ptr++;
}
对于初学者来说,请注意这个函数
int foo(void)
{
printf("Hello world");
}
如果返回类型为int
,则不返回任何内容。相反,你可以写例如
int foo(void)
{
return printf("Hello world");
}
尽管如此,表达式中使用的数组指示符(极少数例外(会转换为指向其第一个元素的指针。
因此,如果阵列的元素类型
f_ptr my_functions[10];
如果是f_ptr
,那么指向数组元素的指针将看起来像
f_ptr * my_ptr = my_functions;
例如,您可以使用类似的指针编写循环
for ( size_t i = 0; i < 10; i++ )
{
my_ptr[i]();
}
或
for ( f_ptr *my_ptr = my_functions; my_ptr != my_functions + 10; ++my_ptr )
{
( *my_ptr )();
}