c:计算中使用的赋值

Asm*_*iel 3 c assignment-operator

我有一个问题,我喜欢谷歌,但我不知道该怎么问她/她/它(谷歌:))

已经在几个示例代码中找到了这样的分配(这个特定代码这里起源于他们在网上复制了数字食谱中的代码,第54页).

我尝试在以下行中了解赋值的用法:

wr = (wtemp = wr) * wpr - wi * wpi + wr;
Run Code Online (Sandbox Code Playgroud)

就我自己对编程逻辑的理解而言,我会把它翻译成

wtemp = wr;
wr = wtemp * wpr - wi * wpi + wr;
Run Code Online (Sandbox Code Playgroud)

那是对的吗?还是应该wpr * wpr - wi [...]?或者完全不同的东西:D?

(根据维基百科,赋值运算符返回对受让人的引用,根据自由字典 - 我检查确定 - 是指定某事物的值)

md5*_*md5 6

表达式a = b的值是赋值a 的值,因此:

wr = (wtemp = wr) * wpr - wi * wpi + wr;
Run Code Online (Sandbox Code Playgroud)

相当于:

wtemp = wr;
wr = wtemp * wpr - wi * wpi + wr;
Run Code Online (Sandbox Code Playgroud)

要么:

wtemp = wr;
wr = wr * wpr - wi * wpi + wr;
Run Code Online (Sandbox Code Playgroud)

参考:

6.5.16分配操作员

赋值表达式具有赋值(...)后左操作数的值.

  • @Bathsheba:它不是很可读.显然,在生产代码中应避免使用这种语句. (2认同)
  • @Asmodiel:不,它不会.C标准表示它是未定义的行为,因为`wr`的值被修改并且在没有序列点的情况下被访问.[谷歌一下.;)](http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors-iiiii-etc) (2认同)