我有一个定义函数:
int foobar(char *ptr,...)
函数调用如下:
int (*fooptr) (char *,...) = foobar;
我无法理解该函数是如何调用的...... 提前致谢
答案 0 :(得分:8)
这不是函数调用。
声明一个名为fooptr
的函数指针变量,它保存函数的地址。
要通过指针调用该函数,例如:
int return_value = (*fooptr)(char_ptr, x, y, z);
答案 1 :(得分:0)
这不是电话。它是fooptr
的声明。
答案 2 :(得分:0)
不会使用您发布的代码调用该函数。第一行是函数声明,第二行是创建指向它的指针。要调用它,您必须使用foobar(myCharPtr[, other arguments])
或fooptr(myCharPtr[, other arguments])
。
答案 3 :(得分:0)
在您的示例中未调用该函数。它的地址存储在fooptr
变量中,这是一个函数指针。如果您稍后在仍然指向foobar
函数时调用该函数指针,它将调用foobar
函数。
您可以将第二行写为:
// declare fooptr as a variable of type function pointer
// taking (char*,...) and returning int
int (*fooptr) (char *,...);
// take the address of foobar function and assign it to fooptr
fooptr = &foobar;
使其更清晰。
答案 4 :(得分:0)
这是varargs function,可以接收可变数量的参数(类似于printf)。你给出的第二行是赋值,而不是函数调用。