簡體   English   中英

產生不同價值的局部變量

[英]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; 你會看到,值實際上是一個垃圾值m2368340你用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM