我知道这个标题是可怕的,为此我很抱歉;老实说,我不知道怎么问我的问题,因为我对此事没有很好的教育。下面是我的问题所关注的一小部分代码,因为我不知道发生了什么,或者它是否有效!虽然,我怀疑它是有效的。
return(*scriptFunction[x])(arguments);
根据我的理解,你只能在C中返回1个值(你可以有多个return语句,但这是不同的,不在主题上)。上述陈述实际上是做什么的?
答案 0 :(得分:7)
代码:
return(*scriptFunction[x])(arguments);
实际上 只返回一个值。
变量scriptFunction
将是一个函数指针数组(1)。您查找该数组的元素编号x
,并调用该函数,并传递参数arguments
。然后来自 函数的返回值就是您返回给调用者的内容。
除了函数指针方面,它与return sqrt(42)
没有区别。
举例来说,以下程序演示了如何做到这一点:
#include <stdio.h>
// Two simple functions which add a fixed value.
int fnPlus3 (int n) { return n + 3; }
int fnPlus7 (int n) { return n + 7; }
// An array holding those two functions.
int (*scriptFunction[])(int) = { fnPlus3, fnPlus7 };
int main (void) {
// Call first function in array.
int x = 0;
printf ("%d\n", (*scriptFunction[x])(100));
// Then call second one.
x = 1;
printf ("%d\n", (*scriptFunction[x])(100));
return 0;
}
虽然打印函数的返回值而不是再次返回它,但它仍然使用相同的表达式,你可以看到它调用基于它的不同函数价值x
:
103
107
(1)或某种形式的等价物,例如指向函数指针数组的指针,或指向单个函数指针的指针(假设x
始终设置为零在后一种情况下)。
答案 1 :(得分:2)
据推测,scriptFunction
是指向函数的指针数组。 *scriptfunction[x]
是指向函数的解引用指针(x
- 第一个)。最后,*scriptfunction[x](arguments)
表示应用于arguments
的函数的调用,因此该函数的结果是最终返回的内容。
旁注:*
并非真的有必要。指向函数的指针不需要取消引用来调用函数,即你可以使用
return scriptFunction[x](arguments);
代替。
答案 2 :(得分:0)
从它的外观来看,似乎行return (*scriptFunction[x])(arguments);
scriptFunction
是一个函数指针数组,这只是在变量x
索引的位置调用函数并发送{ {1}}变量内容作为输入。
此调用函数的返回值是最终返回的值。
这个工作示例应该很有用:
arguments
输出如下:
#include <iostream>
using namespace std;
void func_a(int i)
{
cout << "func_a: " << i << endl;
}
void func_b(int i)
{
cout << "func_b: " << i << endl;
}
int main()
{
void (*funcs[])(int) = { func_a, func_b };
for(int i = 0; i < 2; ++i)
(*funcs[i])(i+1);
return 0;
}
此外,为了将来参考,您应该咨询:How to ask good questions?