数组作为带参数的函数?

gw0*_*gw0 5 c arrays pointers const function-pointers

我正在尝试学习c,所以我尝试阅读一些源代码.
但我不知道这可能意味着什么:

static const char*(*const functab[])(void)={
        ram,date
};
Run Code Online (Sandbox Code Playgroud)

第一部分,static const char*很好,因为它似乎是一个函数(有一个类型的参数void),static应该意味着它只在这个文件中可见,并且const char*应该意味着值不能改变,但地址可以改变.
但在这种情况下,在函数名后面的最后一部分之后没有意义,就像它的情况一样

static const char * date(void);
static const char * ram(void);
Run Code Online (Sandbox Code Playgroud)

而不是函数名称(*const functab[]),一个名为functab的const数组包含地址?
这是包含函数ram和date的某种包装函数吗?一些声明数组的替代方法?

cma*_*ter 0

在 C 中,复杂的变量声明需要从里到外地读取:

  • functab是变量的标识符,所以我们从这里开始阅读......

  • functab[]它是一个数组...

  • *const functab[]常量指针...

  • (*const functab[])(...)到功能...

  • (*const functab[])(void)无需争论...

  • const char*(*const functab[])(void)但返回一个const char*.

的含义static取决于它是在函数外部还是内部。如果它在外部,则表示使用文件范围static声明functab(即仅在单个文件内可见的全局变量.c)。如果它在函数内部,则意味着这functab是一个仅在该函数内部可见的全局变量。

用两个成员初始化= { ram, date }数组。和ramdate应该是声明为 的函数const char* ram(void)

此声明的效果是,以下函数调用是等效的:

const char* result = ram();
const char* result = functab[0]();
Run Code Online (Sandbox Code Playgroud)