C (int(*)()在函数调用中是什么意思
正如标题所说,我想知道C-define-function-call中的“(int(*)())是什么意思 例如,它看起来与此类似:C (int(*)()在函数调用中是什么意思,c,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) 提前谢谢你 将参数强制转换为指向返回char*并接受零个或多个参数的函数的指针。第
#define Bla(x) (Char *) read((char *(*)()) Blub, (char **) x)
还是这个
#define XXX(nx, id) PEM_ASN1_write_bio((int (*)()) id, (char *) nx)
提前谢谢你 将参数强制转换为指向返回
char*
并接受零个或多个参数的函数的指针。第二个函数返回int
您可以使用一个名为“”的程序(和网站,现在)来帮助这些,它说:
:将未知的\u名称强制转换为指向返回char指针的函数的指针(char*(*)())
:将未知的\u名称强制转换为返回int的函数指针(int(*)()
- 这意味着
read
的名为Blub
的第一个参数是指向返回char*
且不接收任何参数的函数的指针。第一个参数表示read将“返回char指针的函数指针”作为第一个参数,“指向char指针”作为第二个参数。若你们想做Bla,只需写Bla(x),我会处理去读取部分
第二种说法是,PEM_ASN1_write_bio的第一个参数必须是“返回int的函数指针”。第二个参数是“指向字符的指针”。你可以用XXX(a,b)代替PEM ASN1(b,a),也就是说,(int(*)())
是一个类型转换操作符,也就是说你要求编译器进行操作
就好像它右边的表达式是int(*)(
)类型。正如其他人所指出的那样,
该类型表示“指向接受任何参数的函数的指针,
并返回一个int
”
要理解类型本身,首先需要理解
变量是用C语言声明的:在大多数语言中,变量声明的语法是
是根据类型规范的语法构造的,但在C语言中,
反过来说
如果要声明一个包含指向此类函数的指针的变量,请编写:
int (*fp)();
这意味着类似于(*fp)(
的表达式的类型为int
:“takefp
,
取消引用它,用任何参数调用它,您将得到一个int
”
现在,为了获得上述声明中
fp
类型的类型转换运算符,请丢失标识符并在其周围添加括号:you get(int(*)()
破译复杂C表达式的最简单方法是从最里面的表达式开始,然后以逆时针模式移动到下一个表达式。
(int(*)()
Tom事实上,cdecl无法解析these@JS刘海:我同意!说清楚一点,我和它没有任何关系,只是在回答这个问题时发现的。:)cdecl还将类似英语的句子转换成C声明。e、 g.“将p声明为指向整数的指针”会将“int*p”作为输出。