[英]local variable producing different value
我已經這樣調用了函數
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
。 請告訴我原因。
您在else
塊中定義了另一個名稱為m
變量,該變量遮蓋了函數參數m
,其作用域從int m
開始,並且在表達式m/2
未初始化。
在語句int m=m/2;
這里右邊的m
包含具有垃圾值的新m
。 如果替換行int m=m/2;
行int m;//=m/2;
你會看到,值實際上是一個垃圾值m
是2368340
你用2該值除以第一種情況下獲得1184170(m/2) into m(m)
您在else塊中定義另一個具有相同名稱m的變量,然后執行操作
int m =m/2;
因此,編譯器將處理本地m而不是外部m; 它的價值不可預測,因為您沒有將其初始化;
else
塊中的int m
變量未初始化。 它包含一些垃圾值。 您將垃圾值除以2。現在,我們說它是未初始化的,這意味着它可以包含int
范圍內的任何值。
我想,您想做的是::
// Inside else block
int temp = m ; // Store the older m value here
int m = temp/2 ;
還是簡單的方法:
int temp = m/2 ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.