Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 奇怪的变量类型声明_C_Variable Declaration - Fatal编程技术网

C 奇怪的变量类型声明

C 奇怪的变量类型声明,c,variable-declaration,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是无符号长字符的类型

当我查看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是无符号长字符的类型定义
  • CK_FUNCTION_LIST_PTR_PTR是类似于
    **CK_FUNCTION_LIST
    的类型定义,其中CK_FUNCTION_LIST是一个结构
  • rv是一个变量
  • c_get_函数_list是一个变量
但是如果我拆分第一行并用它们的原始值替换typedef,我会得到如下结果:

unsigned long rv;
unsigned long (*c_get_function_list)(**ck_function_list);
那么,第二行中的(**ck\u function\u list)是什么意思

提前感谢,, Robert

无符号长(*c_get_function_list)();
是指向其原型为的函数的函数指针

unsigned long func(<param>);
unsigned long func();

这里的指针是
c\u get\u function\u list
c\u get\u function\u list
是指向函数的指针。分配时,您可以像普通函数调用一样调用指向函数:
c\u get\u function\u list(param)

次要挑剔:我认为
**ck\u function\u list
应该是
ck\u function\u list**
在这里。阅读本文后,您应该显示
ck\u function\u list\u PTR\u PTR的完整定义。
unsigned long func(<param>);