繁体   English   中英

为什么退出for循环后变量会失去它的值?

[英]Why does the variable lose its value after exiting for loop?

我是编程界的新手。 我在网上找不到任何相关的东西。 我的变量num没有在for循环内保存分配给它的值。

退出循环后一直为0。 我很确定我以前做过:在for循环之前初始化一个变量,在for for之外使用它。

//num holds the number that shows how many values of
//... array A are bigger than the values on array B
int num{};
for (int i = 0; i < LINES; i++)
{
    for (int j = 0; j < ROWS; j++)
    {
        num = (A[i][j] > B[i][j] ? num++ : num );
    }
}
std::cout << num << " values of array A are bigger than"
                 << " the values of array B" << '\n';

后递增num++将递增num但返回其旧值。

你可能是说

num = (A[i][j] > B[i][j] ? num + 1 : num );

或者,在我看来更短更清晰一点

if(A[i][j] > B[i][j]) { num++; }

在 for 循环中,您将分配给num 2 个可能值之一:

num = num;

这显然不会改变num的值。

和:

num = num++;

在 C++17 之前,这是未定义的行为,代码可能会做任何事情。

从 C++17 开始,这个定义很好。 后增量的工作方式是首先从表达式返回num值。 这是0 然后num递增到1 但是,旧的0值随后被分配给左侧的num ,因此num的值被重置为0

稍微重写num = num++看起来像这样:

old = num;  // old is 0
num++;      // num is 1
num = old   // num is 0

这使得正在发生的事情更清楚。

由于num在循环内永远不会改变,因此循环退出时num的值为0


您可以改为编写修改num的行,如下所示:

num += (A[i][j] > B[i][j]);

num++递增num然后返回之前的值。 这意味着

num = num++;

等于

num = num;

您正在寻找++num ,它增加num然后返回值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM