无法理解具有两个变量的 for 循环
Cannot understand for loop with two variables
当我在具有不同条件的 for 循环中使用两个变量时,就像我在下面使用的那样i<3,j<2
for 循环总是在执行,直到第二个条件失败。
#include<iostream>
#include<conio.h>
using namespace std ;
int main()
{
int i,j ;
for(i=0,j=0;i<3,j<2;i++,j++)
{
cout<<"hello" ;
}
getch() ;
return 0 ;
}
在该代码中,hello
打印 2 次。为什么?
如果我使用i<3,j<10
,"你好"被打印10次。我不明白为什么第一个条件被忽视了。它是依赖于编译器还是其他什么?
如果我用 ||(或(或&&(和(。另一件事是我无法在 for 循环本身中初始化 i 和 j,它向我显示了一个错误,但是当我以 C 样式声明变量或 for 循环外的一个变量时工作正常,为什么会这样?
我使用的编译器是Orwell Dev C++。
提前谢谢。
for(i=0,j=0;i<3,j<2;i++,j++)
相当于
for(i=0,j=0;j<2;i++,j++)
逗号表达式采用最后一个表达式的值。
无论第一个条件是什么,都将被忽略,第二个条件将仅使用。
for
循环包括:
for(START_STATEMENT; CONDITION_EXPRESSION, LOOP_EXPRESSION) BODY_BLOCK
哪里:
-
START_STATEMENT
是任何单个语句,其中可能包括变量声明。如果要声明 2 个变量,可以编写int i=0, j=0
,但不能编写int i=0; int j=0
,因为后者实际上是 2 个语句。同样是节点,该变量声明是语句的一部分,但不能是(子(表达式的一部分。这就是为什么int i=0, int j=0
也是不正确的。 -
CONDITION_EXPRESSION
是计算结果为布尔值的任何单个表达式。在您的情况下,您使用的是具有以下语义的逗号运算符:A, B
将执行以下操作:- 评估
- A(它将评估,而不仅仅是忽略(
- 抛弃 A 的结果
- 评估 B
- 返回 B 作为结果
在你的情况下:
i<3,j<2
你正在比较i<3
,你只是忽略了这个比较的结果。当指令有一些副作用时,逗号表达式很有用,而不仅仅是返回一个值。常见情况有:变量递增/递减或赋值运算符。
-
LOOP_EXPRESSION
是任何不需要计算任何值的单个表达式。在这里,您再次使用逗号表达式,忽略左侧的结果。但是,在这种情况下,您无论如何都不会使用结果,而只是使用++副作用 - 即增加变量的值。 -
BODY_BLOCK
是单个语句或块,用大括号封装。
上述for
可以与以下情况进行比较:
{
START_STATEMENT;
while(EXPRESSION) {
BODY_BLOCK;
LOOP_EXPRESSION;
}
}
c 编译器始终使用第二个条件。
因此使用 J<2。
使用此 for 循环
for(i=0,j=0;j<10;i++,j++)
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 命令行参数,cant 或两个变量
- 在 for 循环中更新两个变量时遇到问题C++
- C++ 编译时在两个变量之间交替
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- 为什么一个接一个声明的两个变量在内存中不相邻?
- 为什么动态分配的两个变量的内存位置不是连续的?
- 是否可以在C++中使用宏交换两个变量的出现?
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- 正确证明C 中的两个变量合理(我想将它们视为一个变量)
- 可视C 编译器将相同的存储位置提供给两个变量
- 尝试使用 {} 和 std::make_pair() 交换两个变量时的行为不同
- 在rootframework中的根文件中编写两个变量
- 最短路径,带有两个变量
- 加入两个变量和LCD打印
- 在循环中声明两个变量以逆转字符串?在C 中
- 具有两个变量的"for"循环,一个变量每次迭代递增,每隔一次迭代递增
- 如何在C++中使用一个类中两个变量的值
- 仅在C 中的一个变量上,两个变量函数的数值集成(使用数值配方库)
- 如何在我存储的两个变量之间生成随机数