c-指向函数指针数组的指针



假设我有一个函数

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 )();
}

相关内容

  • 没有找到相关文章

最新更新