微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么for循环输出0作为第一个数字,如果我单独写相同的for循环条件,它会输出1?

如何解决为什么for循环输出0作为第一个数字,如果我单独写相同的for循环条件,它会输出1?

在我看来,它应该输出 1 作为第一个数字,因为变量 i 首先被初始化,然后检查条件,然后递增。当递增时,它应该输出 1 但它输出 0。为什么?

int i = 0; i < 10; ++i;
cout << i;

// Outputs 1
for (int i = 0; i < 10; ++i)
    cout << i;

// Outputs 0123456789 while having 0 as first number

解决方法

int i = 0; i < 10; ++i;
cout << i;

这不是循环。它按顺序执行以下事情:

int i = 0;  // sets it to 0
i < 10; // true (result is not stored)
++i; // increments to 1
cout << i;
,

在第一个示例中,语句是单独执行的。

int i = 0; i < 10; ++i; // declare variable i,do comparision and discard the result,increment i
cout << i; // print i

在第二个示例中,您必须知道 for 的工作原理。

for loop - cppreference.com

formal syntax:        
attr(optional) for ( init-statement condition(optional) ; iteration_expression(optional) ) statement

iteration_expression - 任何表达式,在循环的每次迭代之后和重新评估条件之前执行。通常,这是增加循环计数器的表达式

上述语法产生的代码等价于:

{
    init_statement
    while ( condition ) {
        statement
        iteration_expression ;
    } 
} 

如您所见,迭代表达式 ++i 在循环体执行后 执行,其中打印了 i。因此,i 的初始值,即 0,在第一次迭代时打印。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。