将函数指针分配给函数指针数组

Raj*_*esh 4 c arrays static initialization function-pointers

在下面的代码中,我试图将函数指针分配给函数指针数组。我收到错误消息

错误:初始值设定项元素不是常数,然后一个注释说“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;
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

您不能使用非常量对象初始化具有静态存储持续时间的数组。

要么像这样声明数组

void (*stateTable2[]) (void) = { function1, function2 };
Run Code Online (Sandbox Code Playgroud)

或移动声明

void (*stateTable2[]) (void) = {function1,fptr};
Run Code Online (Sandbox Code Playgroud)

在 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;
}
Run Code Online (Sandbox Code Playgroud)

它的输出是

World!
Hello World!
Run Code Online (Sandbox Code Playgroud)