(int(*)())在函数调用中的含义

时间:2009-11-25 14:45:53

标签: c

就像标题所说,我想知道C-define-function-call中的“(int(*)())”是什么意思?

例如,它看起来类似于:

#define Bla(x)    (Char *) read((char *(*)()) Blub, (char **) x)

或者

#define XXX(nx, id)     PEM_ASN1_write_bio((int (*)()) id, (char *) nx)

提前谢谢!

5 个答案:

答案 0 :(得分:9)

将参数强制转换为指向函数的指针,该函数返回char *并获取零个或多个参数。第二个函数返回int

您可以使用名为“cdecl”的程序(以及现在的网站)来帮助解决这些问题,它说:

  • (char *(*)()):将unknown_name转换为指向函数的指针,返回指向char的指针
  • (int (*)()):将unknown_name转换为指向函数返回int的指针

答案 1 :(得分:3)

解密复杂C表达式的最简单方法是从最内层表达式开始,然后以逆时针方向图案移动到下一个表达式。 (int(*)())

  1. (*)指针,逆时针运动点击(然后继续前进以点击)
  2. (*)()指向功能的指针,继续前进(然后再继续前进)
  3. int(*)()指向返回int的函数的指针,移到int,然后继续点击)
  4. (int(*)())最后转到(,你有它,
  5. 指向返回int的函数的指针,因为它包含在outer()中是因为宏。

    希望这有帮助, 最好的祝福, 汤姆

答案 2 :(得分:1)

(int (*)())是一个类型转换运算符,也就是说你要求编译器运行 好像右边的表达式是int (*)()类型。正如其他人所说, 有问题的类型意味着“指向接受任何参数的函数的指针, 并返回int“。

要了解类型本身,首先需要了解其中的奇怪方式 变量在C语言中声明:在大多数语言中,变量声明的语法 是从类型规范的语法构造的,但在C中,在某种程度上, 反过来了。

如果你要声明一个包含指向这样一个函数的指针的变量,你可以写:

int (*fp)();

表示类似(*fp)()的表达式为int类型:“take fp, 取消引用它,用任何参数调用它,你将获得int“。

现在,为了在上面的声明中获得fp类型的类型转换运算符,丢失标识符并添加括号:得到(int (*)())

答案 3 :(得分:0)

这意味着名为read的{​​{1}}的第一个参数是指向返回Blub并且不接收任何参数的函数的指针。

答案 4 :(得分:0)

首先说,read将“返回char指针的函数指针”作为第一个参数,将“指向char指针的指针”作为第二个参数。如果你想做Bla,只需写Bla(x),我就会处理de read part!

第二个说,PEM_ASN1_write_bio的第一个参数必须是“返回int的函数指针”。第二个参数是“指向char的指针”。并且您可以使用XXX(a,b)代替PEM_ASN1_write_bio(b,a),这就是全部