C switch 语句中的指针操作

标签 c operator-precedence post-increment

大家好,我尝试编写一个简单的 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/

相关文章:

C 程序和宏

javascript - 三元条件下的多个 OR 运算符,

c++ - 如果条件为 TRUE,则在 do while 循环中发布增量(最好的方法?)

c - 了解有关字节序的 C 代码

c++ - 在 CPU 上并行减少数组

c - undefined reference 'getchar_unlocked' 错误

java - Java中的For循环永远运行

c - 使用它们的比率对数组进行排序

java - 使用 double 时,为什么(x/(y * z))与(x/y/z)不同?

java - 一个带有for循环的程序