指向函数指针数组的指针
A pointer to array of pointers to function
假设我有一个函数
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");
}
有 return 类型 int
它 return 什么都没有。相反,你可以写成
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 )();
}
假设我有一个函数
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");
}
有 return 类型 int
它 return 什么都没有。相反,你可以写成
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 )();
}