我一直在寻找答案,但我越来越困惑。
我有这两个for循环
for (int i = 1; (i < 5) && move.from[i - 1]; i++) {
int const departurePoint = move.from[i - 1];
int arrivalPoint = move.to[i - 1];
if (arrivalPoint < 0) { // A blot was hit
arrivalPoint = -arrivalPoint;
board[1 - turn][BAR - arrivalPoint]--; // Remove the blot
board[1 - turn][BAR]++; // and place it on the bar */
}
board[turn][departurePoint]--; // Move our own checker
board[turn][arrivalPoint]++; // to it's landing spot.
}
和
for (int i = 1; (i < 5) && move.from[i - 1]; ++i) {
int const departurePoint = move.from[i - 1];
int arrivalPoint = move.to[i - 1];
if (arrivalPoint < 0) { // We hit a blot
arrivalPoint = -arrivalPoint;
board[1 - turn][BAR - arrivalPoint]++; // Replace the blot
board[1 - turn][BAR]--; // remove it from the bar
}
board[turn][departurePoint]++; // Replace our own checker
board[turn][arrivalPoint]--; // to it's original spot.
}
我的问题是:
答案 0 :(得分:3)
您的简短问题是 i++
和++i
之间的差异是表达式的值?
值 i++
是增量前i
的值。 ++i
的值是增量后i
的值。
示例:强>
int i = 2;
std::cout << i++ << std::cout; // shows 2
std::cout << i << std::cout; // shows 3
i = 2;
std::cout << ++i << std::cout; // shows 3
std::cout << i << std::cout; // shows 3
i--
和--i
运算符的工作方式相同。
答案 1 :(得分:2)
for (int i = 1; (i < 5) && move.from[i - 1]; i++ /*i increments here and nowhere else*/)
和
for (int i = 1; (i < 5) && move.from[i - 1]; ++i /*i increments here and nowhere else*/)
两个代码都是等价的。差异非常小,不适用于此示例。
i==3
时,
++i
表示:
4=i+1=(++i)
然后i=4
。
i++
表示:
3= i =(i++)
然后i=4
。
在将其分配给另一个变量之前,它没有任何区别:
for(...; ...; k=i++)
或
for(...; ...; k=++i)
i+1
表示:
将i
存储到临时变量中。将临时变量增加1。它读取i
但不写入i
。 i
仅会在++
,--
或i=
以及其他一些案例中发生变化。
答案 2 :(得分:0)
for循环有两个语句和一个表达式:
for(init_statement;condition_expresion;progress_statement){
//...body...
}
该指令的语义与写作基本相同:
init_statement;
while(condition_expresion){
//...body...
progress_statement;
}
请注意,i++
和++i
的副作用相同,变量i
加1。当这两个指令用作表达式时,它们是不同的,i++
在递增之前计算i
的值,++i
计算增量之后的值。这与for循环无关,因为progress语句的值被丢弃。