Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法理解C函数调用_C_Function - Fatal编程技术网

无法理解C函数调用

无法理解C函数调用,c,function,C,Function,我有一个定义如下的函数: int foobar(char *ptr,...) 函数调用如下所示: int (*fooptr) (char *,...) = foobar; 我无法理解函数是如何被调用的。。。 提前感谢这不是函数调用 它声明一个名为fooptr的函数指针变量,该变量保存函数的地址 要通过指针调用该函数,您可以执行以下操作: int return_value = (*fooptr)(char_ptr, x, y, z); 这不是函数调用 它声明一个名为fooptr的函数指针变量

我有一个定义如下的函数:

int foobar(char *ptr,...)
函数调用如下所示:

int (*fooptr) (char *,...) = foobar;
我无法理解函数是如何被调用的。。。
提前感谢

这不是函数调用

它声明一个名为
fooptr
的函数指针变量,该变量保存函数的地址

要通过指针调用该函数,您可以执行以下操作:

int return_value = (*fooptr)(char_ptr, x, y, z);

这不是函数调用

它声明一个名为
fooptr
的函数指针变量,该变量保存函数的地址

要通过指针调用该函数,您可以执行以下操作:

int return_value = (*fooptr)(char_ptr, x, y, z);

这不是电话。这是一个
fooptr

的声明,不是一个调用。这是一个
fooptr

声明,您发布的代码不会调用该函数。第一行是函数声明,第二行是创建指向它的指针。要调用它,您必须使用
foobar(myCharPtr[,其他参数])
fooptr(myCharPtr[,其他参数])

函数不会使用您发布的代码调用。第一行是函数声明,第二行是创建指向它的指针。要调用它,您必须使用
foobar(myCharPtr[,其他参数])
fooptr(myCharPtr[,其他参数])

在您的示例中没有调用该函数。它的地址存储在
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;

让它更清楚。

在您的示例中,函数没有被调用。它的地址存储在
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;

更清楚地说。

这是一个,可以接收不同数量的参数(类似于)。您给出的第二行是赋值,而不是函数调用。

这是一行,它可以接收数量可变的参数(类似于)。您给出的第二行是赋值,而不是函数调用。

声明
实例化
也?@hari-变量声明也可以初始化变量。
声明
实例化
也?@hari-变量声明也可以初始化变量。