Я назвал функцию вот так,
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
. скажите пожалуйста причину.
4 ответа
Вы определили другую переменную с именем m
в блоке else
, которая затеняет аргумент функции m
, ее область действия начинается сразу после int m
, и она не инициализирована в выражении { {X4}}.
m
в m/2
уже является новой переменной, а не m
снаружи, она не инициализирована.
В операторе int m=m/2;
здесь m
с правой стороны содержит новый m
, имеющий значение мусора. если вы замените строку int m=m/2;
на строку int m;//=m/2;
, вы увидите, что значение на самом деле является мусорным значением m
, то есть 2368340
для 1-го случая, когда вы делите это значение на 2, чтобы получить 1184170(m/2) into m(m)
Вы определяете другую переменную с тем же именем m внутри блока else и выполняете операцию
int m =m/2;
Поэтому компилятор будет обрабатывать локальный m, а не посторонний m; и его ценность непредсказуема, потому что вы не инициализируете его;
Переменная 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 ;
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.