Сколько вещей вы можете сосчитать на пальцах?

Давайте поговорим о нуле — этой надоедливой цифре!

Для счета на пальцах? Ну давай попробуем ..

0 … 1 … 2 … 3 … 4 … 5 … 6 … 7 … 8 … 9 … 10

Это 11! Этот надоедливый ноль сумел втиснуться в наш счет. Ноль сам по себе является допустимым числом нашего счета, так как нам нужно сообщить кому-то, что у нас нет предметов.

Но ноль вызывает много проблем в программировании, так как нам нужно знать, с чего мы начинаем нашу индексацию. Должны ли мы начать с нуля и считать, или мы должны начать с 1? И если нам нужно n элементов, нужно ли считать до n или n-1? Это особенно важно, когда мы индексируем наши элементы массива, поскольку мы вычисляем местоположение в памяти и которое относится к его значению индекса и количеству байтов, которые представляет каждый элемент.

В Паскале для счета от 1 до 10:

n: array [1..10] of integer;
   for i:= 1 to 10 do
      writeln('[', i, '] = ', n[i] );

Но в C мы бы использовали:

  int n[5];

  for(int i = 0; i < 5; ++i) {
     printf("%d", n[i]);
  }

В примере C нашим последним элементом является n[4], который является пятым элементом. Стандартной проблемой новичка является доступ к элементу n[5] (и который не распределен):

int n[5];

  for(int i = 0; i <= 5; ++i) {
     printf("%d", n[i]);
  }

В этом случае компилятор, скорее всего, разрешит это и фактически отобразит содержимое памяти после области, выделенной для массива (и которая может содержать конфиденциальную информацию). Обычно это называется переполнением буфера.

Деление на ноль

Как мы все должны знать со школьных времен, когда вы делите на ноль, ваш калькулятор просто сдается и обычно отображает «NaN» — не число. К счастью, большинство языков программирования также решают эту проблему с исключением. Но, если ее не поймать, программа, скорее всего, рухнет (или, по крайней мере, завершится с исключением). Но «не число», возможно, не совсем правильно, так как число просто равно бесконечности — просто наши языки программирования быстро перехватывают нулевое значение и возвращают «NaN». Но математически мы ошибаемся, считая результат бесконечным.