Заметил, что если переместить объявление и инициализацию переменной на несколько строк выше, перед другой конструкцией for, то вывод программы поменяется.
ТЗ:
Напишите программу, которая определяет и инициализирует массив первыми 10 нечетными числами.
Выведите числа из массива на консоль по пять в строку.
Моя реализация:
#include <iostream>
int main() {
const int len = 10;
int nums[len] = {};
for(unsigned i; i < len; i++) {
nums[i] = i * 2 + 1;
}
int count = 0;
for(unsigned i; i < len; i++) {
if(count % 5 == 0) {
std::cout << '\n';
}
std::cout << *(nums+i) << ' ';
count++;
}
}
Вывод такой, какой и должен быть:
> 1 3 5 7 9
11 13 15 17 19
Но если переместить строку
int count = 0;
выше:
int count = 0;
for(unsigned i; i < len; i++) {
nums[i] = i * 2 + 1;
}
for(unsigned i; i < len; i++) {
if(count % 5 == 0) {
std::cout << '\n';
}
std::cout << *(nums+i) << ' ';
count++;
}
то:
> 0 0 0 0 0
0 0 0 17 19
Ещё, если в первом случае убрать инициализацию, оставив только объявление:
int count;
Результат поменяется:
> 1 3
5 7 9 11 13
15 17 19
Хочется узнать причину подобного поведения. Почему же тот первый цикл влияет на результат работы второго цикла именно таким образом, через count?
Использую Windows x64, g++ компилятор.