Учу C++, ради эксперимента решил написать прогу, которая бежит по памяти и выводит нули и единицы.
0 - все из следующих 8 битов равны 0, 1 - минимум один из следующих 8 битов равен 1. Вот код:
bool array[1] = {};
for (int i = 0;;i++) {
cout << array[i] << ' ';
}
Запустив, увидел, что проскакивают числа вроде 240 и т.п. Можете расписать, как работает этот код? Почему байты в памяти не преобразуются в bool
, если мы как бы берем из массива bool
значений? Как работает этот код?
P.S. Вопрос возник потому, что если мы сделаем массив char
вместо bool
, байты будут преобразоваться в символы, так почему тогда байты не преобразуются в bool
?
Для наглядности два скриншота с выводом:
bool array:
char array:
Этот код не работает, так как на второй итерации происходит чтение за пределами массива, что является Неопределенным Поведением.
Что касается печати чисел вроде 240, то печать bool
вполне может быть реализована представлением bool
как целочисленного типа.
Первая и самая очевидная проблема в том, что в бесконечном цикле трогаете память за пределами массива, и как было упомянуто чтение за пределами массива является Неопределенным Поведением. Ну и конечно же здесь bool array[1] = {}; происходит инициализация массива нулем (фигурные скобки), и вы получаете вполне ожидаемый результат на итерации array[i] , где i - это 0.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Задача: Вывести не менее 3 слов, содержащих искомую подстроку и встречающихся наиболее часто