c - 奇怪的变量类型声明

标签 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 的类型定义
  • CK_FUNCTION_LIST_PTR_PTR 是类似 **ck_function_list 的类型定义,其中 ck_function_list 是一个结构
  • rv 是一个变量
  • c_get_function_list 是一个变量

但是如果我拆分第一行并将 typedef 替换为它们的原始值,我会得到如下内容:

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

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

提前致谢, 罗伯特

最佳答案

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

是指向原型(prototype)为的函数的函数指针。

unsigned long func(<param>);

这里的指针是c_get_function_list

关于c - 奇怪的变量类型声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27919872/

相关文章:

java - 为什么不是实例变量?

c - 在 C 中赋值之前如何存储表达式值?

html - 如何在 HTML 中显示原始 rgb 图像

c - 奇怪的 XLib 错误; XDrawString 仅在 sleep 后有效

c# - 更新表时必须声明标量变量@

javascript - 在不同行上声明和分配变量时返回最后分配的值

c - 快速替换数组中元素的方法 - C

c - C 中的变量声明

c - 循环体中声明的变量在迭代过程中是否被保留?

c - 将函数变量声明为局部而不是全局会不会影响效率?