我已经调用了这个函数,
decimal2binary(1, 4);
我错误地在以下函数的定义部分中重新定义了变量m
void decimal2binary(int m, int n) {
int arr[n];
cout<<"m:"<<m<<endl;
for(int i=0;i<n;i++)
{
if(m==0)
{
arr[i]=0;
}
else
{
arr[i]=m%2;
int m=m/2;
cout<<"m:"<<m<<endl;
}
}
当我运行代码时,我得到了这样的输出,
m:1
m:1184170
m:592085
m:296042
m:148021
为什么这个重复变量m
会产生奇怪的值,例如1184170..592085
。请告诉我原因。
答案 0 :(得分:2)
您在m
块中定义了名为else
的另一个变量,该变量隐藏了函数参数m
,其范围在int m
之后开始,并且&#39 ; s未在表达式m/2
中初始化。
答案 1 :(得分:1)
在声明int m=m/2;
右侧m
右侧包含具有垃圾值的新m
。如果您使用行int m=m/2;
替换行int m;//=m/2;
,您会看到该值实际上是m
的垃圾值,2368340
对于第一种情况,您将此值除以2得到1184170(m/2) into m(m)
答案 2 :(得分:1)
在else块中定义另一个具有相同名称m的变量并执行操作
int m =m/2;
所以编译器这将对待本地m而不是局外人m; 并且它的价值是不可预测的,因为你没有初始化它;
答案 3 :(得分:0)
int m
块内的变量else
未初始化。它包含一些垃圾值。您将垃圾值除以2.现在,当我们说它未初始化时,它意味着,它可以包含int
范围内的任何值。
我想,你想做的是::
// Inside else block
int temp = m ; // Store the older m value here
int m = temp/2 ;
或简单方法::
int temp = m/2 ;