(этот ответ относится только к стороне CSS вещей ...)
Как само собой разумеющееся, я всегда нацеливаюсь на дочерние TD так:
tr.odd td {}
tr.even td {}
Причина Дело в том, что IE фактически применяет цвет фона TR, удаляя значение, установленное в TR, и применяя его к каждому отдельному TD в пределах этого TR. Иногда у вас может быть сброс CSS или другие правила CSS, которые отменяют странный способ IE делать цвет фона TR, так что это способ убедиться, что вы этого избегаете.
Кроме того, вы можете рассмотреть возможность установки только
tr td {background-color: #EEDDEE}
и
tr.odd td {background-color: #EEEEDD}
, чтобы ваш код был немного менее подробным
Что происходит, когда вы пишете в массив [5], вы пишут i. Они находятся рядом в стеке, в памяти, так что это ожидаемое поведение.
Подумайте об этом так,
вы создали массив из 5 элементов в
int array[5];
на самом деле, массив - это просто адрес . число в [] указывает, как далеко от этого адреса требуется доступ. Итак:
, поэтому, если вы дойдете до
В C нет автоматической проверки границ, поэтому можно перезаписать вашу собственную память. Вы поместили «i» в стек после array [5], скорее всего, array [5] будет i.
Вы просто установили array [5] или i равным 22, следовательно, i равно 22. Теперь, когда i равно 22, ваш следующий поиск в array [i] действительно является array [22]. Это захватывает весь мусор, оказавшийся в этом месте памяти; или, если повезет, вылетает.
Как только вы переполните выделенную память, вы окажетесь на «неопределенной территории». Вероятно, запись в массив записывалась туда, где в стеке хранился «i».
Обратите внимание, что в отличие от языков, таких как Java и C #, C не выполняет проверку границ времени выполнения, поэтому не гарантируется, что он сделает что-нибудь полезное (например, segfault) когда вы переполняете массив, строку или поврежденную память. Это не гарантирует что-либо. Он мог разбиться, он мог продолжать работать, он мог заставить демонов вылететь из носа .
@Doug есть, но давайте немного расширим его.
У вас есть array [5] и i в качестве автоматических переменных, поэтому они размещаются в стеке при входе, поэтому вы выделить 6 ячеек: array [0], array [1], ... array [4], а затем i.
Когда вы устанавливаете i в 5, array [i] указывает на ячейку в стеке, содержащую i. Затем вы назначили ему 22. Итак, теперь, когда вы напечатали, i = 22.
Затем вы получаете array [i] или array [22], которые находятся на конце стека; случайное значение оказывается тем большим числом.
Скорее всего, хранилище для локальной переменной «i» находится сразу после «array» в стеке, поэтому & array [5] == & i, что означает, что вы назначаете 22 для «i» когда вы присваиваете 22 массиву [5].
Вы объявили массив из 5 целых чисел, но цикл for записывает значения в 10 записей.
Измените
int array[5];
на
int array[10];