变量在没有赋值的情况下具有值 C++
Variable has value without being assigned C++
#include <iostream>
#include <string>
using namespace std;
int count_number_place(int number)
{
int number_placement;
while (number >= 1)
{
number_placement++;
cout << number_placement <<endl;
number/=10;
}
return number_placement;
}
int main(int argc, const char * argv[])
{
// insert code here...
int user_input_number;
cout << "Please enter your number here" << endl;
cin >> user_input_number;
cout << "User input number is "<< user_input_number <<endl;
cout << "The numbers of digits in the input number is :" << count_number_place(user_input_number) << endl;
return 0;
}
我正在尝试创建一个小程序来计算给定数字的位数。
每当我输入像 200
这样的数字时,预期的结果是 3
。相反,我得到了 7963
。当我在 number_placement
行放置一个断点时,我得到了一个默认值 7961
这很奇怪,因为该值没有在代码中的任何地方分配。
你能解释一下为什么我会得到这个结果吗?
只需将函数更改为
int count_number_place(int number)
{
int number_placement = 0; // assign 0
while (number >= 1)
{
number_placement++;
cout << number_placement <<endl;
number/=10;
}
return number_placement;
}
即改变
int number_placement;
至
int number_placement = 0;
如果您尝试访问未初始化的变量,您将获得垃圾值,因为这是未定义的行为。编译器只会给它一些垃圾值。
这个 link 可能有用
What happens to a declared, uninitialized variable in C? Does it have a value?
编译程序时,您创建的变量(在本例中为number_placement
)将分配一些内存space(内存中的一个位置,有一个地址) .如果您尝试访问此地址(我谈到过这个 space),并且您之前没有为其分配任何内容,您将读取那里留下的内容,即当前值。我们称它为 garbage,因为它是其他一些应用程序的剩余内存,这些应用程序之前可能一直在使用这个内存位置,或者只是一些内存在之前没有分配任何值内存已开机(或损坏,因为内存未使用,因此未刷新此位置)。
总是初始化你的变量。
我的意思是:不要从之前未赋值的变量中读取值。
在你的情况下,如果你想从零开始你的计数器,你应该用零初始化它:
int number_placement = 0;
访问它之前(在您的情况下,递增它)。
#include <iostream>
#include <string>
using namespace std;
int count_number_place(int number)
{
int number_placement;
while (number >= 1)
{
number_placement++;
cout << number_placement <<endl;
number/=10;
}
return number_placement;
}
int main(int argc, const char * argv[])
{
// insert code here...
int user_input_number;
cout << "Please enter your number here" << endl;
cin >> user_input_number;
cout << "User input number is "<< user_input_number <<endl;
cout << "The numbers of digits in the input number is :" << count_number_place(user_input_number) << endl;
return 0;
}
我正在尝试创建一个小程序来计算给定数字的位数。
每当我输入像 200
这样的数字时,预期的结果是 3
。相反,我得到了 7963
。当我在 number_placement
行放置一个断点时,我得到了一个默认值 7961
这很奇怪,因为该值没有在代码中的任何地方分配。
你能解释一下为什么我会得到这个结果吗?
只需将函数更改为
int count_number_place(int number)
{
int number_placement = 0; // assign 0
while (number >= 1)
{
number_placement++;
cout << number_placement <<endl;
number/=10;
}
return number_placement;
}
即改变
int number_placement;
至
int number_placement = 0;
如果您尝试访问未初始化的变量,您将获得垃圾值,因为这是未定义的行为。编译器只会给它一些垃圾值。
这个 link 可能有用
What happens to a declared, uninitialized variable in C? Does it have a value?
编译程序时,您创建的变量(在本例中为number_placement
)将分配一些内存space(内存中的一个位置,有一个地址) .如果您尝试访问此地址(我谈到过这个 space),并且您之前没有为其分配任何内容,您将读取那里留下的内容,即当前值。我们称它为 garbage,因为它是其他一些应用程序的剩余内存,这些应用程序之前可能一直在使用这个内存位置,或者只是一些内存在之前没有分配任何值内存已开机(或损坏,因为内存未使用,因此未刷新此位置)。
总是初始化你的变量。
我的意思是:不要从之前未赋值的变量中读取值。
在你的情况下,如果你想从零开始你的计数器,你应该用零初始化它:
int number_placement = 0;
访问它之前(在您的情况下,递增它)。