【问题标题】:Strange variable type declaration奇怪的变量类型声明
【发布时间】:2015-01-13 10:24:35
【问题描述】:

当我查看 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 之类的 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) 是什么意思?

提前致谢, 罗伯特

【问题讨论】:

  • 轻微挑剔:我认为**ck_function_list 应该是ck_function_list**
  • 您应该按原样显示CK_FUNCTION_LIST_PTR_PTR 的完整定义。

标签: c variable-declaration


【解决方案1】:
unsigned long (*c_get_function_list)(<param>);

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

unsigned long func(<param>);

这里的指针是c_get_function_list

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      相关资源
      最近更新 更多