While 语句 - 无法理解概念
While statements - Cant understand a concept
我目前正在学习 C++,现在我被 while 语句困住了。
问题是我无法正确理解在 while 语句开始之前初始化变量或变量在 main 中全局初始化之间有什么区别。
下面的一段代码可能会更好地解释我的问题:
int main()
{
using namespace std;
int x = 1;
while (x <= 5)
{
int y = 1;
while (y <= x)
{
cout << y++ << " ";
}
cout << "\n";
++x;
}
return 0;
}
此代码输出为:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
但以下
int main()
{
using namespace std;
int x = 1;
int y = 1;
while (x <= 5)
{
//int y = 1;
while (y <= x)
{
cout << y++ << " ";
}
cout << "\n";
++x;
}
return 0;
}
产生:
1
2
3
4
5
嗯,这听起来可能很愚蠢,但我真的需要理解它。我已经讨论了几个主题,但是变量的初始化位置并没有让我明白这一点。如果有人能指出我正确的方向,那将不胜感激。
谢谢
y = 1
在第一种情况下,当第一个 while 循环开始时,会一次又一次地初始化。
在第二种情况下,它没有再次初始化,即它达到x的值并且没有进入第二个while循环。
在第二个代码中,这都是因为 y
的值从未被重置为 y=1
。
而在第一种情况下,您总是在 while()
循环检查条件并进入循环时分配 int y=1
。
示例中的第一个循环表明,对于 x 的每个值,y 变量将再次初始化为 1,y 的值将上升到 x(这意味着每次 x 增加时您都将 y 初始化为 1) .
对于第二个例子,y 只初始化一次,每次 x 值增加(变化)时都会使用它的最后一个值。
while
用于循环,在第一个程序中,每次 while 循环时都初始化 y=1
。在第二个程序中,它总是得到 y=1
因为它没有被循环。希望这能澄清您的问题。
与其说是初始化,不如说是赋值。以下是您的代码的执行方式,大致如下:
第一个案例
- 为 x 和 y 分配内存
- 将 x 设置为 1
- 检查x是否小于5,否则转到9
- 将 y 设置为 1
- 检查y是否小于x,否则转到8
- 打印 y
- 增加y,转到5
- 增加x,转到3
- 结束
第二种情况
- 为 x 和 y 分配内存
- 将 x 设置为 1
- 将 y 设置为 1
- 检查x是否小于5,否则转到9
- 检查y是否小于x,否则转到8
- 打印 y
- 增加y,转到5
- 增加x,转到4
- 结束
注意第 3 点和第 4 点是如何在两种情况之间交换的。
我目前正在学习 C++,现在我被 while 语句困住了。 问题是我无法正确理解在 while 语句开始之前初始化变量或变量在 main 中全局初始化之间有什么区别。
下面的一段代码可能会更好地解释我的问题:
int main()
{
using namespace std;
int x = 1;
while (x <= 5)
{
int y = 1;
while (y <= x)
{
cout << y++ << " ";
}
cout << "\n";
++x;
}
return 0;
}
此代码输出为:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
但以下
int main()
{
using namespace std;
int x = 1;
int y = 1;
while (x <= 5)
{
//int y = 1;
while (y <= x)
{
cout << y++ << " ";
}
cout << "\n";
++x;
}
return 0;
}
产生:
1
2
3
4
5
嗯,这听起来可能很愚蠢,但我真的需要理解它。我已经讨论了几个主题,但是变量的初始化位置并没有让我明白这一点。如果有人能指出我正确的方向,那将不胜感激。 谢谢
y = 1
在第一种情况下,当第一个 while 循环开始时,会一次又一次地初始化。
在第二种情况下,它没有再次初始化,即它达到x的值并且没有进入第二个while循环。
在第二个代码中,这都是因为 y
的值从未被重置为 y=1
。
而在第一种情况下,您总是在 while()
循环检查条件并进入循环时分配 int y=1
。
示例中的第一个循环表明,对于 x 的每个值,y 变量将再次初始化为 1,y 的值将上升到 x(这意味着每次 x 增加时您都将 y 初始化为 1) .
对于第二个例子,y 只初始化一次,每次 x 值增加(变化)时都会使用它的最后一个值。
while
用于循环,在第一个程序中,每次 while 循环时都初始化 y=1
。在第二个程序中,它总是得到 y=1
因为它没有被循环。希望这能澄清您的问题。
与其说是初始化,不如说是赋值。以下是您的代码的执行方式,大致如下:
第一个案例
- 为 x 和 y 分配内存
- 将 x 设置为 1
- 检查x是否小于5,否则转到9
- 将 y 设置为 1
- 检查y是否小于x,否则转到8
- 打印 y
- 增加y,转到5
- 增加x,转到3
- 结束
第二种情况
- 为 x 和 y 分配内存
- 将 x 设置为 1
- 将 y 设置为 1
- 检查x是否小于5,否则转到9
- 检查y是否小于x,否则转到8
- 打印 y
- 增加y,转到5
- 增加x,转到4
- 结束
注意第 3 点和第 4 点是如何在两种情况之间交换的。