如何使用数组索引作为运算符?

如何使用数组索引作为运算符?

这样:

#include main() { char sign[]={'+','-'}; int a, b; a = 12 sign[1] 10; printf("%d",a); } 

实际上这段代码不起作用。 这类程序的正确代码是什么?

最简单的方法是使用switch语句或if-else链。

 #include int main() { char sign[]={'+','-'}; int a,b; switch (sign[1]) { case '+': a = 12 + 10; break; case '-': a = 12 - 10; break; } printf("%d",a); } 

如果我这样做,我可能最终会将一些逻辑转移到一个函数中。 也许是这样的:

 #include int perform_operation(char op, int lhs, int rhs) { switch (op) { case '+': return lhs + rhs; case '-': return lhs - rhs; default: return 0; } } int main() { char sign[]={'+','-'}; int a = perform_operation(sign[1], 12, 10); printf("%d",a); } 

如果您不是严格依赖于中缀符号,那么您将能够简单地使用

 int plus(int x, int y) { return x + y; } int minus(int x, int y) { return x + y; } int (*)(int, int) sign[]={plus, minus}; 

你将能够将其用作:

 int a = sign[1](10, 12); 

你可以使用函数指针:

 //function: int addInt(int a, int b) { return a+b; } //define the pointer: int (*functionPtr)(int,int); main () { functionPtr sign[5]; sign[0] = &addInt; int a = 5, b = 8; //... int sum = sign[0](a,b); printf("%d", sum); return 0; } 

它有点复杂,在大多数简单的情况下,你会想要使用switch语句来调用不同的函数,但在处理更大,更复杂的情况时,这是一个非常有用的方法。

我使用像这样的函数指针数组的一个例子是在开发图像处理应用程序时,供应商提供了一些非常特殊的处理算法。
他们的代码虽然是专有的,所以虽然我们可以获得包含可以进行处理的函数的dll,但我们无法将其构建到我们的代码中。 由于可能需要任何数量的这些dll,并且我们希望能够在不重新编译整个系统的情况下添加 – 删除function,我们需要能够读取dll并对其进行管理。 我们使用上面这样的方法来做这件事。

我很想用这个三元组:

a = 12 + (sign[1] == '-' ? -1 : +1) * 10;

当然这默认为+但你可以引入早期检查以防止这种情况发生。

您可以使用它来形成一个宏:

12 + SIGN(1) 10;

#define SIGN(s) (sign[(s)] == '-' ? -1 : +1) *

除了方括号之外,它会恢复你问题中表达式的forms。