正如标题所示,我有一个函数使用了一个临时数组,并想从另一个数组中写入一个值到这个数组中,然后将这两个值相乘。
例子:
float[] a = {0, 0}
a[0] *= a[0] = b[n ];
a[1] *= a[1] = b[n + 1];
我希望以上内容能够实现以下功能:
a[0] = b[n ];
a[0] *= a[0]; //(aka: a[0] = a[0] * a[0])
a[1] = b[n + 1];
a[1] *= a[1];
尽管行为似乎并不是这样发生的。 相反,它似乎只是将“a”中原始值乘以“b”中所持有的任何值,如下所示:
a[0] = a[0] * b[n ];
a[1] = a[1] * b[n + 1];
我一直认为 "=" 后面的内容会先进行计算,例如执行以下代码时:
float a, b;
a = b = 5;
//"a" and "b" both equal "5" now.
既然情况是这样的,那么我的原始示例不应该可以工作吗?
有人能解释一下发生了什么,以及为什么这段代码不能按预期工作吗?
a[0]=b[n]*b[n]
,这样更容易阅读。像这样的代码只有在编译器需要适应约30k内存的日子里才有用,通过一些巧妙的处理可能可以节省一些CPU周期,因为当时的编译器并未进行优化。现在没时间了,但在Java中,所有这些都应该在规范中设置(而在C中,我认为它要么是未定义的,要么是实现定义的)。 - Axel