大家好,我尝试编写一个简单的 switch 语句,但遇到了这个问题。 我无法弄清楚为什么这段代码可以正确工作,我猜这是因为运算符 ** 和++ 的优先级。 如果是这种情况,如果有人可以编写一个示例,我应该如何在如下语句中使用 value-at * 和 inc/dec 运算符,我会很高兴。
提前致谢,
while (--argc > 0)
argv++;
switch (**argv)
这段代码没有
while (--argc > 0)
switch (**(argv++))
完整代码:
while (--argc > 0) {
switch (**(argv++)) {
case '\0':
panic("empty command line argument");
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
push (atof(*argv));
break;
case '+':
push(pop() + pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '*':
push(pop() * pop());
break;
case '/':
op2 = pop();
push(pop() / op2);
break;
default:
panic("unknown command");
break;
}
}
最佳答案
在任何表达式中对给定变量使用后递增都会导致变量在表达式求值后递增。
正如您的第一个工作代码所述,您在在开关中获取其引用值之前递增argv
值,您希望变量递增在计算表达式之前,因此您需要使用预增量:
while (--argc > 0)
switch (**(++argv))
关于C switch 语句中的指针操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32475598/