在下面的代码中,我试图将函数指针分配给函数指针数组。我收到错误消息
错误:初始化元素不是常量,然后一条注释说'stateTable2 [1]'接近初始化。
在main
中,我尝试将函数指针分配给另一个函数指针,没有问题。
void function1 (void) // Function definition
{
}
void function2 (void) // Function definition
{
}
void (*fptr)(void) = function2;
void (*stateTable2[]) (void) = {function1,fptr};
int main()
{
void(*fp)(void) = fptr;
return 0;
}
答案 0 :(得分:4)
您可能无法使用非常量对象初始化具有静态存储持续时间的数组。
将数组声明为
void (*stateTable2[]) (void) = { function1, function2 };
或移动声明
void (*stateTable2[]) (void) = {function1,fptr};
在main内部,将数组作为具有自动存储持续时间的数组。
这是一个示范程序。
#include <stdio.h>
void function1 (void) // Function definition
{
printf( "Hello " );
}
void function2 (void) // Function definition
{
puts( "World!" );
}
void (*fptr)(void) = function2;
int main(void)
{
void ( *stateTable2[] ) (void) = { function1, fptr };
void(*fp)(void) = fptr;
fp();
for ( size_t i = 0; i < sizeof( stateTable2 ) / sizeof( *stateTable2 ); i++ )
{
stateTable2[i]();
}
return 0;
}
它的输出是
World!
Hello World!