C++ 减量算子的奇异行为
我的代码旨在反向打印数组,但由于某些原因,减量运算符没有按预期工作。根据我的理解,C++ 减量算子的奇异行为,c++,C++,我的代码旨在反向打印数组,但由于某些原因,减量运算符没有按预期工作。根据我的理解,--var在对变量执行任何操作之前递减变量var,而var--在操作完成后递减变量var,例如for循环 这是我的密码: #include <iostream> int main() { int arrLen; int arr[4]; scanf("%d\n %d %d %d %d", &arrLen, &arr[0], &arr[1], &ar
--var
在对变量执行任何操作之前递减变量var
,而var--
在操作完成后递减变量var
,例如for
循环
这是我的密码:
#include <iostream>
int main() {
int arrLen;
int arr[4];
scanf("%d\n %d %d %d %d", &arrLen, &arr[0], &arr[1], &arr[2], &arr[3]);
for (; arrLen >= 0; --arrLen)
printf("%d %d\n", arr[arrLen], arrLen);
return 0;
}
如果未打印递减变量,则应为:
02341
以下是我的预期结果:
2 3 4 1
这种情况之所以不能如您所期望的那样运行,是因为for
循环的工作方式
for (statement_1; condition; statement_2) {
body;
}
语句_1
在循环开始之前只调用一次
条件
在循环的每个过程开始时进行评估。如果为真,则计算主体。如果没有,则循环退出
语句_2
在循环的每个过程结束时,在重新计算条件之前,在主体之后计算
因此,虽然--var
会递减并返回递减的值,但每次运行for
循环时,实际上只会在的主体之后调用它
这意味着--var
和var--
在语句_2
的一部分时,对for
循环的行为具有相同的影响
要产生所需的行为,可以将for循环更改为:
while (--arrLen >= 0)
printf("%d %d\n", arr[arrLen], arrLen);
这并不像您所期望的那样,是因为for
循环是如何工作的
for (statement_1; condition; statement_2) {
body;
}
语句_1
在循环开始之前只调用一次
条件
在循环的每个过程开始时进行评估。如果为真,则计算主体
。如果没有,则循环退出
语句_2
在循环的每个过程结束时,在重新计算条件之前,在主体之后计算
因此,虽然--var
会递减并返回递减的值,但每次运行for
循环时,实际上只会在的主体之后调用它
这意味着--var
和var--
在语句_2
的一部分时,对for
循环的行为具有相同的影响
要产生所需的行为,可以将for循环更改为:
while (--arrLen >= 0)
printf("%d %d\n", arr[arrLen], arrLen);
试着用下面的句子。我认为你的for循环不正确
for (; arrLen > 0; --arrLen) printf("%d %d\n", arr[arrLen - 1], arrLen);
它现在将具有以下输出
2 4
3 3
4 2
1 1
试着用下面的句子。我认为你的for循环不正确
for (; arrLen > 0; --arrLen) printf("%d %d\n", arr[arrLen - 1], arrLen);
它现在将具有以下输出
2 4
3 3
4 2
1 1
为什么在scanf()函数中使用“\n”?@M.SChaudhari检查int后接a\n这个问题是如何得到3张赞成票的?我不明白……@ZivS问不相关的问题没有意义,因为人们觉得它很有用,所以投票了。@JamesBalajan,这不是问题。如果有的话,那就是修辞。在我看来,您在调试\理解代码方面没有表现出任何努力,也没有表现出或操作员--
的工作方式。此外,这个问题本身本来可以用更好的措辞。我不知道一些事情是没有问题的,但是互联网上到处都是问这个问题和其他关于S.O.get down的问题的人,他们投票支持在scanf()中使用“\n”的方式function?@M.SChaudhari检查int后接a\n这个问题是如何得到3张赞成票的?我不明白….@ZivS问不相关的问题没有意义,因为人们觉得它很有用,所以投票了。@JamesBalajan,这不是一个问题。如果有的话,那就是修辞。在我看来,您在调试\理解代码方面没有表现出任何努力,也没有表现出或操作员--
的工作方式。此外,这个问题本身本来可以用更好的措辞。我不知道一些事情是没有问题的,但是互联网上到处都是问这个问题和其他关于S.O.get down的问题的人。投票结果很差,这会起作用,但它没有解决关于如何工作的潜在误解,但它没有解决关于如何工作的潜在误解用于
工作