我正在阅读 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/