Как работает этот блок кода?

124
14 июля 2019, 05:10

Учу 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:

Answer 1

Этот код не работает, так как на второй итерации происходит чтение за пределами массива, что является Неопределенным Поведением.

Что касается печати чисел вроде 240, то печать bool вполне может быть реализована представлением bool как целочисленного типа.

Answer 2

Первая и самая очевидная проблема в том, что в бесконечном цикле трогаете память за пределами массива, и как было упомянуто чтение за пределами массива является Неопределенным Поведением. Ну и конечно же здесь bool array[1] = {}; происходит инициализация массива нулем (фигурные скобки), и вы получаете вполне ожидаемый результат на итерации array[i] , где i - это 0.

READ ALSO