1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Формально - надо, фактически - не поможет... Ты не получишь ничего, кроме 1. У тебя массив описан статически как [1 .. 1]? Вот его верхняя граница и будет возвращаться через High...
пока не выделю помять..(?) хорошо, описываем как TDynArray = array[0..1] of r; запрашиваем writeln(high(1)); зы мне надо матрицу с двумя строками и динамическим количеством столбцов.
Повторяю: при использовании средств TP невозможно получить размер динамически выделенного массива (если только при выделении памяти не запоминать размер), поскольку:
Цитата(TP Help)
function High(X) Returns the highest value in the range of the argument.
Remarks: Result type is X, or the index type of X. X is either a type identifier or a variable reference. The type denoted by X, or the type of the variable denoted by X, must be one of the following types.
Array type: the highest value within the range of the index type of the array
Понимаешь, в чем дело? Описывать-то тебе массив (для объявления указателя на него) придется либо [1 .. 1], либо [1 .. maxint div sizeof( R )], иначе смысл - то какой в динамическом массиве, если все известно на этапе компиляции? А вот как только ты описал этот массив, High сразу же будет возвращать конечное значение интервала, задающего индексы. Все, круг замкнулся...
Выход - одни из двух: либо (как я написал выше) использовать TP и запоминать размер выделяемого массива (кстати, вполне логично, его ж надо потом еще корректно удалить), либо 32-битный компилятор + SetLength, тогда размер (корректный) возвращается функцией Length.