我正在尝试学习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 }
用两个成员初始化数组。 ram
和date
都应该是声明为const char* ram(void)
的函数。该声明的作用是,以下函数调用是等效的:
const char* result = ram();
const char* result = functab[0]();