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的某种包装函数吗?一些声明数组的替代方法?
在 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]();
Run Code Online (Sandbox Code Playgroud)