几乎不用说:如果有人像你的第一个代码片段一样编写生产C代码,我就不得不打他们
以下代码在C:中的等效Delphi代码是什么
int32 *P;
int32 c0, c1, i, t;
uint8 *X;
t = P[i], c0 = X[t], c1 = X[t + 1];
坦率地说,逗号运算符让我很困惑。下面的内容大错特错吗?
{$POINTERMATH ON}
var P: ^Int32; c0, c1, i, t: Int32; X: ^UInt8;
t:= P[i]; //<--?
c0:= X[t];
c1:= X[t+1];
t:= c1; //<--?
C中的逗号运算符具有尽可能低的优先级。所以你的陈述相当于:
(t = P[i]), (c0 = X[t]), (c1 = X[t + 1]);
然后从左到右对其进行评估。所以它相当于:
t = P[i];
c0 = X[t];
c1 = X[t + 1];
然而,如果你做了这样的事情:
z = (a = b, c = d);
那么它就相当于:
a = b;
c = d;
z = c;
因为逗号运算符"返回"其最终操作数。
我还应该指出,因为每个逗号都是一个序列点,所以像这样的东西是定义明确的:
i = i + 1, i++, --i;
因为这不是:
i = i + i++ - --i;
几乎不用说:如果有人像你的第一个代码片段一样编写生产C代码,我就不得不打他们