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

static const char*(*const functab[])(void)={
        ram,date
};

第一部分static const char*很好,因为它似乎是一个函数(具有void类型的参数),static应该表示它仅在此文件中可见,而const char*应该表示值不能更改,但地址可以更改。改变了。
但是在那种情况下,在函数名后面的最后一部分之后就没有意义了,就像在这种情况下
static const char * date(void);
static const char * ram(void);

除了函数名称,还有(*const functab[]),这是一个称为functab的包含地址的const数组?
这是一种包含函数ram和date的包装函数吗?声明数组的另一种方法?

最佳答案

复杂的变量声明需要在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]();
    

    10-06 10:24
    查看更多