下面有两个不同的代码。两者之间的区别只是对于变量sum,sum是初始化的,而不是给sum值0 sum=0;
#include <iostream>
using namespace std;
int main(){
//This code will display first ten numbers and get the sum of it
cout << "The natural numbers are: " << endl;
for(int i=1; i<=10; i++)
{
cout << i << " ";
}
cout << endl;
// variable was initialized
int sum;
cout << "The sum of first 10 natural numbers: ";
for(int i=1; i<=10; i++)
{
sum = sum +i;
}
cout << sum;
cout << endl;
}
此代码输出:
自然数是:1 2 3 4 5 6 7 8 9 10
前 10 个自然数之和:32821
程序以退出代码结束:0
#include <iostream>
using namespace std;
int main(){
//This code will display first ten numbers and get the sum of it
cout << "The natural numbers are: " << endl;
for(int i=1; i<=10; i++)
{
cout << i << " ";
}
cout << endl;
// here I gave the value 1... this time it worked
int sum =0;
cout << "The sum of first 10 natural numbers: ";
for(int i=1; i<=10; i++)
{
sum = sum +i;
}
cout << sum;
cout << endl;
}
此代码输出:
自然数是:1 2 3 4 5 6 7 8 9 10
前10个自然数之和:55
程序以退出代码结束:0
代码为什么要这样做?有人能给我解释一下为什么他们给了我两个不同的数目吗?
激活编译器标志-Wun初始化
。
在第一个程序中,sum
保持未初始化并包含垃圾值。因此,您会得到错误。OTOH,在第二个程序中,sum
的值被初始化为0
,正好是零,因此计数成功。
实际上,在第一组代码中,编译器取变量<code>和。此值<code>32766
所以在第二种情况下,你们给了sum一个初始值,所以编译器知道用户给了一个值。因此,它将相应地执行给定的操作。在循环内部,和
将从0开始,并继续执行给定的操作,直到它退出循环。这种情况2代码的操作如下所示:
sum = sum + i; //(here value of "i" increase by 1 with iteration of the given loop)
/* 1 = 0 + 1
3 = 1 + 2
6 = 3 + 3
10 = 6 + 4
15 = 10 + 5
21 = 15 + 6
28 = 21 + 7
36 = 28 + 8
45 = 36 + 9
55 = 45 + 10
As you can see the value of "sum" after the loop is 55
*/
但在第一种情况下,您没有给出sum
初始值,因此编译器不知道sum
的值是0、6、15、7还是10。所以,编译器为它取了一个随机值,在您的情况下是32766。在循环内,它从32766开始并继续其给定的操作。Case1代码的操作如下:-
sum = sum + i; //(like previous case here too value of "i" increase by 1 with iteration of the given loop)
/* 32767 = 32766 + 1
32769 = 32767 + 2
32772 = 32769 + 3
32776 = 32772 + 4
32781 = 32776 + 5
32787 = 32781 + 6
32794 = 32787 + 7
32802 = 32794 + 8
32811 = 32802 + 9
32821 = 32811 + 10
Here you can see the value of "sum" after the operation is 32821
*/
好吧!总结所有内容,您的逻辑和代码在我看来很好,但在第一种情况下,sum
的值是由编译器随机分配的,所以在第一种情况下一切都出错了。
如果你不初始化< code>sum,它就有一个不确定的值,你无法知道它将执行什么操作。读取未初始化的变量是未定义的行为,这样做会导致整个程序无效。
顺便说一句;你似乎对什么是初始化感到困惑。int sum;
不会初始化sum
,它只是声明它-它不会给它一个初始值,并且您可能不会读取它或在计算中使用它,直到您为它分配了一个已知值。int sum=0;
确实初始化sum
-也就是说,它给它一个初始值,您现在可以有效地读取它并在计算中使用它。
给定一个0和1的数组,我们最多可以将K个值从0更改为1。 返回仅包含1的最长(连续)子数组的长度。 例1: 例2: 注: https://leetcode.com/problems/max-consecutive-ones-iii/ 这是问题链接。在第一个测试用例中,我得到了输出9,但应该是6。我不知道哪里出了问题?
问题内容: 每次尝试编译时,它表明变量可能未初始化。我认为可能是问题所在。告诉我如何在中运行2条语句。 问题答案: d1不在else块中且仅在if或else if块中初始化,因此,如果if()和elseif()块中的所有语句均为false,则控制器进入else块,而d1仍然不是初始化。因此,当您尝试在system.out.println()中访问它时,编译器正确地抛出该错误。您可能想在一开始将值初
对java来说真的很陌生,并且在这个任务中遇到了一些麻烦。任务是: 编写一个简单的计算器程序,打印欢迎消息,接受用户的简单算术表达式,并执行请求的操作。程序应重复此操作,直到两个操作数都为0,然后退出。 它运行得很好,但我不确定如何获得While循环的句柄,以便计算器将继续运行,直到答案为0。抱歉,如果这是一个非常基本的问题。任何帮助都将不胜感激。
问题内容: 我在程序中看到了与程序中此特定循环相关的不同行为,但我不确定我为什么理解它的行为方式。 的输出是 的输出是 我去网上看了以下内容 在切片上进行测距时,每次迭代都会返回两个值。第一个是索引,第二个是该索引处的元素的副本 它说一个副本,这是否意味着它返回了字符串的副本,但这实际上是指向变量的指针?在这种情况下,在循环结束时对will的任何引用都实际上引用了数组中的最后一个元素,例如?这是否
我遇到了一个有趣的问题,我不明白发生了什么: 据我所知,我提供的单个整数参数可以解释为使用参数调用构造函数,也可以解释为使用初始化列表的构造函数。似乎只有当我提供左值时才调用initialiser_list构造函数,但当我提供r-value(至少是文字)时,构造函数。为什么会这样? 这也意味着: 结果仅为大小为1的向量; 结果是一个大小为num\u元素的向量,但我认为应该避免这种初始化,因为偶尔会
问题内容: 我有一个简单的程序: 当我运行该程序时,我看到的只是用于输出。我原本希望我们会遇到第一轮,然后是,然后是etc。 这是由于这样的事实,一旦我们尝试在左侧重新声明,其值就会重置为? 如果有人可以指出我的详细情况,那将很棒。 更改为,似乎正在按预期方式打印数字。我对它达到最大32位值的速度感到惊讶! 问题答案: 该问题是由于整数溢出引起的。 在32位二进制补码算法中: 确实确实开始具有2的