奇怪的变量类型声明

时间:2015-01-13 10:24:36

标签: c variable-declaration

当我查看opensc的来源,特别是libpkcs11.c文件时,我发现了一个类型声明和一个函数调用,我只是不明白:

CK_RV rv, (*c_get_function_list)(CK_FUNCTION_LIST_PTR_PTR);
c_get_function_list = (CK_RV (*)(CK_FUNCTION_LIST_PTR_PTR)) sc_dlsym(mod->handle, "C_GetFunctionList");

我知道:

  • CK_RV是unsigned long
  • 的typedef
  • CK_FUNCTION_LIST_PTR_PTR是**ck_function_list之类的typedef,其中ck_function_list是结构
  • rv是变量
  • c_get_function_list是一个变量

但如果我拆分第一行并用其原始值替换typedef,我会得到类似的结果:

unsigned long rv;
unsigned long (*c_get_function_list)(**ck_function_list);

那么,第二行中的(** ck_function_list)是什么意思?

提前致谢, 罗伯特

2 个答案:

答案 0 :(得分:0)

unsigned long (*c_get_function_list)(<param>);

是一个函数指针,指向原型为的函数。

unsigned long func(<param>);

这里的指针是c_get_function_list

答案 1 :(得分:0)

c_get_function_list是指向函数的指针。分配后,您可以像正常函数调用一样调用指向函数:c_get_function_list( param )