ITeration_Test, А что в этом удивительного? Вы циклом заполнили 4х1+19+1=24 байт (при y=0 с 0 по 19, на второй итерации с 1 по 20, потом с 2..21, 3..22, 4..23, причем только одним символом "0", а потом этот символ и вывели. Вот если бы вы заполняли разными значениями, то вы бы увидели в чём ошибка. В случе с y*8+x было бы: на первой итерации ячейки 0..19, потом 8..27, 16..35, 24..43, 32..51.
Если бы вы запускали бы программу в VS Studio, то IDE бы сразу заругалась за то, что вы вышли из диапазона. Вот единственное, что по настоящему удивительно, так то, что у вас не было ошибки во время выполнения.
во-первых, при использовании индекса, выходящего за пределы объявленного массива, вы затираете чужую память. Там могут быть не только данные, но и какой-то программный код.
Во-вторых, в индексе стоит формула [y * 1 + x], наверное вы хотели указать [y *20 + x] ?
Deita, "..скажите, а изучение какого либо языка ассемблера, поможет лучше понять Си, и если да, то какого 8080?.."
C изначально разрабатывался для написания Unix для PDP-11. Если вы видели ассемблер для машин PDP-11 и советских процессоров КР1801, то многие конструкции языка становятся очевидными. Классическое (небезопасное) копирование строки
На С:
while ((*dst++ = *src++) != '\0');
То же на ассемблере PDP-11:
loop: MOVB (src)+, (dst)+
BNE loop
Но учить ради этого ассемблер не стоит - бессмысленная трата времени
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Если бы вы запускали бы программу в VS Studio, то IDE бы сразу заругалась за то, что вы вышли из диапазона. Вот единственное, что по настоящему удивительно, так то, что у вас не было ошибки во время выполнения.