Рейтинг:
2
Jochen Arndt
Это похоже на функцию, которая находит близкое значение к MainValue
внутри массива по возрастанию чисел и возвращает индекс. Значение close здесь определяется как наименьшее значение в массиве, которое больше или равно MainValue
.
Сама функция использует не 2D-массив, а 1D-массив. Это не проблема, потому что 2D-массив может быть сопоставлен с 1D-массивом, где 1D-индекс эквивалентен x + y * 16, где x-самый правый 2D-индекс, y-самый левый и 16-размер x-части. В вашем примере функция вызывается с диапазоном от 0 до 15. Таким образом, он использует только нижнюю часть 2D-массива (Con1002ignTempMap[0][0]
к Con1002ignTempMap[0][15]
). При прохождении &Con1002ignTempMap[1][0]
, он будет выполнен для верхней части.
Срок
i = (iLeft + iRght) >> 1;
вычисляет средний индекс текущего диапазона поиска. Использование этого индекса уменьшает среднее число циклов, которые должны быть выполнены до тех пор, пока не будет найден результат.
bagade M
если мой массив имеет такие значения, как
Con8881EngTemp[2][16]={{-10,0,5,10,15,20,30,40,50,60,70,80,90,100,110,120{22,20,17,14,12,8,7,5,4,4,2,0,0,1,2,3}};
Основное Значение= 28
будет ли после выполнения он показывать i=ileft=3?
Jochen Arndt
Это зависит от главного значения. Если это находится в диапазоне от 10 до 14, то 3 должны быть возвращены.
Однако я не выполнил код и просто говорю вам, чего бы я ожидал.
Чтобы узнать, что происходит на самом деле, используйте отладчик и наблюдайте за переменными или вставляйте некоторые операторы printf.
bagade M
спасибо, Йохен. Я получил
CPallini
В таком случае результат вызова функции IndexCaln будет равен 5.