Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2011, 02:59   #41
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Все понятно) Спасибо большое, за консультацию)

Итого резюмируя: память, выделяемая процессу изначально заполнена нулями.
А статическая память, в отличие от стековой - гарантированно заполнена нулями, за исключением тех областей, которые заполняются данными, которые программист инициализировал явно (константы всякие и прочее).

Но сама по себе глобальная переменная себя явно-дефолтно не инициализирует. Она тупо смотрит на область памяти, которая содержит ноль.

Никаких специальных конструкторов для глобальных переменных не предусмотрено.


Капитан! Продолжаем наше плаванье дальше!
_Bers вне форума Ответить с цитированием
Старый 24.12.2011, 15:23   #42
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Но сама по себе глобальная переменная себя явно-дефолтно не инициализирует. Она тупо смотрит на область памяти, которая содержит ноль.

Никаких специальных конструкторов для глобальных переменных не предусмотрено.
Стандарт гарантирует, что все глобальные переменные будут zero-initialized. И компилятор обязан делать это в независимости от особенностей ОС. Чаще всего это реализовано в compile-time.
still_alive вне форума Ответить с цитированием
Старый 24.12.2011, 15:27   #43
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Стандарт гарантирует, что все глобальные переменные будут zero-initialized.
компилятор, обязан это сделать, но не сказано как.
и они это делают.
Цитата:
И компилятор обязан делать это в независимости от особенностей ОС.
компилятор вправе использовать особенности ОС, особенности формата исполняемого файла и тп.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.12.2011, 15:54   #44
ITTI
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 65
По умолчанию

интересно, я когда-нибудь буду такой умной?
вот, переделанный вариант, но, например, при 50 делает лишний круг.
Код:
char c;
    int left=0, right=100, middle, ok=0;
     while (ok==0) {
          middle = (left + right) / 2;
          cout << "a > " << middle << "?\n";
          cin >> c;          
                         if (right - left <= 1){
                                  if (c == 'y') ok=right;
                                  else ok=left; }
                         else if (c == 'y') left=middle+1; 
                         else right = middle;}

Последний раз редактировалось ACE Valery; 26.12.2011 в 17:52.
ITTI вне форума Ответить с цитированием
Старый 24.12.2011, 16:32   #45
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

ITTI, Кэп! Проблема не столько с самим кодом, сколько с постановкой задачи.

"загаданное число больше 50?" Если я загадал как раз таки 50, как я могу ответить на этот вопрос? Естественно, что 50 не больше 50, значит я отвечают "нет", и начинается угадывание.

При такой постановке задачи, 1 круг поисков будит делаться в любом случае

/ps не хочешь иметь проблем с неициализированными переменными - инициализируй их всегда ЯВНО.

Код:
char c; // что содержит в начале программы?
_Bers вне форума Ответить с цитированием
Старый 24.12.2011, 16:40   #46
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
// что содержит в начале программы?
первое её использование это присваивание значения, так что в данном случае не обязательно, но лучше помнить поо это.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.12.2011, 16:50   #47
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
первое её использование это присваивание значения, так что в данном случае не обязательно, но лучше помнить поо это.
1. Первое место использования - это присвоение, а не инициализация. Был бы вместо чара объект потяжелее - поимели бы нерациональное падение производительности.

2. Функции, принимающие в качестве аргумента ссылку на данные могут поиметь крэш, если объекты не инициализированы. Дебаг в студии обычно кричит "попытка поюзать без инициализации", релиз - поведение не определено.

3. Что бы не иметь проблем, проще один раз приучить себя сразу инициализировать данные, и навсегда забыть о "нюансах".
_Bers вне форума Ответить с цитированием
Старый 24.12.2011, 18:16   #48
ITTI
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 65
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Проблема не столько с самим кодом, сколько с постановкой задачи.
делала и >=, меняя код и не меняя. получается еще больше шагов, это в лучшем случае. что подскажите?
//ps критику учла - char c = ' '.
ITTI вне форума Ответить с цитированием
Старый 24.12.2011, 19:23   #49
ITTI
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 65
По умолчанию

как можно инициализировать вектор, если на этом этапе конструктор я не изучала?
ITTI вне форума Ответить с цитированием
Старый 24.12.2011, 19:28   #50
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Ну ) самое простое, что ты тут можешь сделать - дописать последней строчкой цикла
Код:
if (left==right) ok=left;
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu со мной не дружит Жигилий_Ульяна Компоненты Delphi 5 25.12.2008 11:04
проблемы с select или со мной... smoke888 JavaScript, Ajax 2 23.09.2008 19:02