Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > самоприсваивание значения переменной


Автор: vancha94 28.6.2011, 23:27
Здравствуйте, 
возникла проблема, при написании простейшей программы на С++
иницилизируя три переменных типа double , первая остается пустой, а две вторые заполняются какими-то произвольными числами, 
вопрос: как эти значения там оказались?
скрин: 
http://s1.ipicture.ru/


Код

#include <iostream>;
#include <cmath>;
using namespace std;
int main( )

{
    const double g = 9.8, pi = 3.14;
    double v, t , alpha ;
    cin >> v;
    cin >> t;
    alpha = g * t / 2 / v;
    alpha = asin (alpha);
    alpha = alpha * 180 / pi;
    cout << alpha;
}


помогите пожалуйста

Автор: boostcoder 28.6.2011, 23:37
ну так инициализируй нулем. в чем проблема?

Автор: vancha94 28.6.2011, 23:39
я до этого тоже дошел,  мне не понятно откуда эти значения берутся и с чего?

Автор: volatile 29.6.2011, 01:03
Цитата(vancha94 @  28.6.2011,  23:39 Найти цитируемый пост)
мне не понятно откуда эти значения берутся и с чего? 

vancha94, это стековый мусор. Следы прошлых воплощений.

Автор: newbieone 29.6.2011, 02:40
vancha94, а компилятор разве не выдавал warning на этапе компиляции, что-то вроде variable might not have been initialized?
на самом деле, то, что первая переменная получила значение, равное нулю - воля случая. с тем же успехом там могло оказаться что угодно. согласно хорошему тону, т.н. local variables - т.е. те, что не являются членами класса, всегда должны быть инициализированы разработчиком при их определении. ни в C, ни в C++, ни в Java их равенство нулю, если разработчик забыл это сделать, не гарантируется.
Цитата
The value of an uninitialized variable is determined by whatever pattern of zeros and ones was left in its memory location by the last program that used that portion of memory.

Автор: vancha94 29.6.2011, 08:38
Цитата(newbieone @ 29.6.2011,  02:40)
 local variables  всегда должны быть инициализированы разработчиком при их обьявлении. ни в C, ни в C++, ни в Java их равенство нулю, если разработчик забыл это сделать, не гарантируется.
Цитата
The value of an uninitialized variable is determined by whatever pattern of zeros and ones was left in its memory location by the last program that used that portion of memory.

То есть переменные одной программы используют область памяти переменных, использованных в предыдущей программе.
Я правильно понял?

Автор: boostcoder 29.6.2011, 09:07
Цитата(vancha94 @  29.6.2011,  08:38 Найти цитируемый пост)
Я правильно понял?

ага. все именно так.

Автор: newbieone 29.6.2011, 09:10
только я немного заврался, 
Цитата
local variables  всегда должны быть инициализированы разработчиком

не при объявлении, а при определении, конечно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)