1

所以我在思考这个问题(这是一个家庭作业/考试复习问题):

a[j++] = ++i;在不使用前/后自增运算符的情况下写下等价的表达式。如果无法提供这样的表达,请解释原因。

我能够想出以下内容:

a[j] = i+=1;
j+=1;

我想不出一种方法来增加 a[] 中的 j 作为后增量,而不是在j+=1;之后使用,我相信这会导致无法提供这样的表达式的答案(因为它的两行代码而不是一行)和只是解释一下,如果没有后增量运算符,您就不能后增量。

我错过了什么还是我正确?我只是想仔细检查一下。提前致谢。

编辑:感谢@James McNellis,他提供了一种使用方法 a[(j+=1)-1] = (i+=1);

4

4 回答 4

11

这既可怕又丑陋,但无论如何:

a[(j += 1) - 1] = (i += 1);
于 2011-02-23T03:52:22.713 回答
2

如果您知道它i不会归零,那么想到的一种解决方案是:

(a[j] = i += 1) && (j += 1);
于 2011-02-23T04:00:22.277 回答
0

逗号运算符算不算?

a[j] = i + 1, j += 1, i += 1;

这就像三行单独的代码......但从技术上讲是一行。(我知道第二个 i += 1 是不必要的,但我写它是为了保持一致。)

于 2011-02-23T04:23:29.167 回答
0

甚至不使用 += 的等价表达式是

(a[j] = i = i + 1, j = j + 1, a[j-1])

(i = i + 1, j = j + 1, a[j-1] = i)
于 2011-02-23T09:59:55.617 回答