我正在读这个早期的答案,里面有一段我无法理解的C代码.它基本上是这样的:
if((int_1 += *pointer++ = int_2++) < int_3) continue;
Run Code Online (Sandbox Code Playgroud)
我可以把它分解成这样的东西 -
这是什么意思?我可以谈谈这一点:
if((int_1 = int_1+ *pointer++ (unsure about this part))<int_3) continue;
Run Code Online (Sandbox Code Playgroud)
tem*_*def 10
所以对于初学者来说,这是非常非常糟糕的C代码.喜欢,可怕的C代码.就像,我已经在C中编写了很长时间,并且必须提取运算符优先级图表,因为我从来没有遇到类似这样糟糕的事情.所以没有理由写这样的东西 - 当然不是在生产代码中,并且希望不是作为一个类的一部分,因为你不应该永远不需要知道这个特定的运算符优先级的怪癖(来源:我教CS为生.)我甚至会说你引用的来源是不应该写这种方式的坏C代码.
但话说回来,让我们分解吧!这里的核心表达是
(int_1 += *pointer++ = int_2++) < int_3
Run Code Online (Sandbox Code Playgroud)
在该内部表达式中有两个赋值运算符,它们具有相同的优先级,从右到左具有相同的组.这意味着这相当于
(int_1 += (*pointer++ = int_2++)) < int_3
Run Code Online (Sandbox Code Playgroud)
这意味着
int_2并存储其旧值.pointer指向的位置,然后将指针前进到下一个位置.int_1.int_3.没有理由做这样的事情.写吧
int val = int_2;
*pointer = val;
int_1 += val;
int_2++;
pointer++;
if (val < int_3) {
...
}
Run Code Online (Sandbox Code Playgroud)
是的!不要写这样的代码.永远.:-)
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |