我正在阅读 this earlier answer,其中有一段我无法理解的 C 代码。它基本上是这样的:

if((int_1 += *pointer++ = int_2++) < int_3) continue;

我可以把它分解成这样——

这是什么意思?我可以做到这一点:
if((int_1 = int_1+ *pointer++ (unsure about this part))<int_3) continue;

最佳答案

因此对于初学者来说,这确实是非常糟糕的C代码。就像,可怕的 C 代码。就像,我已经用 C 进行了很长时间的编码并且不得不启动 operator precedence chart 因为我从未遇到过这样可怕的事情。所以没有理由写这样的东西——当然不是在生产代码中,希望不是作为类(class)的一部分,因为你永远不需要知道运算符优先级的这种特殊怪癖(来源:我以教 CS 为生)。我什至会说您引用的源代码是不应该以这种方式编写的坏 C 代码。

但话虽如此,让我们分解它!这里的核心表达是

(int_1 += *pointer++ = int_2++) < int_3

在那个内部表达式中有两个赋值运算符,它们具有相同的优先级并且从右到左分组。这意味着这相当于
(int_1 += (*pointer++ = int_2++)) < int_3

这表示
  • 增加 int_2 并存储其旧值。
  • 将该值存储在 pointer 指向的位置,然后将指针前进到下一个位置。
  • 将该值添加到 int_1
  • 然后查看该值是否小于 int_3

  • 没有理由做这样的事情。写就好了
    int val = int_2;
    *pointer = val;
    int_1 += val;
    
    int_2++;
    pointer++;
    
    if (int_1 < int_3) {
        ...
    }
    

    是的!不要写这样的代码。曾经。 :-)

    关于c - (int_1 += *pointer++ = int_2++) < int_3 是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42820928/

    10-11 23:15
    查看更多