В зависимости от вашего компилятора, someArray[2]
является указателем на findTheValue
!
Поскольку эти переменные объявляются одна за другой, вполне возможно, что они будут последовательно размещаться в памяти (я считаю,в стеке).C на самом деле не управляет памятью и не проверяет ошибки, поэтому someArray[2]
означает, что память имеет значение someArray[0] + 2 * sizeof(int)
.
Так что, когда findTheValue
равно 0, мы вычитаем, тогда когда findTheValue
равно 1,мы вычитаем 1. Когда findTheValue
равно 2, мы вычитаем someNumber
(который теперь равен 94) и выходим.
Это поведение ни в коем случае не гарантируется .Не надейтесь на это!
РЕДАКТИРОВАТЬ: Вероятнее всего, что someArray [2] просто указывает на мусорные (неуказанные) значения в вашей оперативной памяти.Эти значения, вероятно, больше 93 и приведут к выходу из цикла.
EDIT2: Или, возможно, someArray[2]
и someArray[3]
- большие отрицательные числа, и вычитание обоих приводит к тому, что someNumber переходит на отрицательное значение.