![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическая память
Ender © (2002-10-13 16:32:00)Чё-то я торможу... Дано
type
N = array [0..2] of integer;
TNarray = array [word] of N;
PNarray = ^TNarray;
end;
var
N1, N2 : PNarray;
........
Подскажите пожалуйста как сравнить значения, например N1[0] и
N2[0] ? Премного благодарен.
Anatoly Podgoretsky (2002-10-13 22:05:00) [1]Возможно даже подойдет статический двухменый массив, а не массив массивов
MBo (2002-10-13 21:59:00) [2]Массивы переменной длины указанным образом объявлять можно, работая с ними c помощью AllocMem и т.п. функций, но требуется это лишь в специальных случаях, например, при манипуляциях с некоторыми структурами Windows API.
В остальных же случаях обычно достаточно, как уже отметили, динамических массивов с их SetLength.
Anatoly Podgoretsky (2002-10-13 18:56:00) [3]Так правильнее 65536*3*4 байт, но это не существенно.
Forever (2002-10-13 18:51:00) [4]Так как TNarray - массив, то N1[0] и N2[0] его составляющие
Неверно. Ведь написано N1, N2 : PNarray;// указатель
Есди бы N1 и N2 были бы TNarray...
Соответственно, указатели не имеет смысла сравнивать. Это просто адреса в памяти. Тем более, что указателей N1[0] N2[0] нету, есть указатели N1 и N2.
Если речь идет о сравнении N1^[0] и N2^[0], то:
можно переписать объявление типа как:
TNarray = array[word] of array [0..2] of integer;
И тогда встает вопрос, что имеется в виду под сравнением переменных типа TNarray.
Допустим, N1^ это
(1,2,3,4)
а N2^
(5,8,3,6)
Как их можно сравнивать ? Они не больше, не меньше друг друга.
Если нужно установить их идентичность, то просто:
if N1^[0]=N2^[0] then ...
Это произойдет, если все иъ элменты равны
Юрий Зотов (2002-10-13 18:40:00) [5]> Массив с изначально не известной длинной
type
TNArray = array of N;
См. dynamic arrays в справке.
А Ваш
TNarray = array [word] of N
это массив с ИЗВЕСТНОЙ длиной. Его длина - 65535 элементов. И всю эту память он сразу сожрет, как только Вы вызовете New. И нельзя будет ни добавить, ни удалить элемент, можно только отслеживать количество фактически заполненных элементов.
А сравнивать в Вашем варианте можно так:
if N1^[0][0] > N2^[0][0] then...
Только массивы должны быть, конечно, уже размещены, а индексация должна быть двойной (у Вас же N1 и N2 - это УКАЗАТЕЛИ на ДВУМЕРНЫЕ массивы).
Anatoly Podgoretsky (2002-10-13 18:36:00) [6]65536*6*4 байт
TTCustomDelphiMaster (2002-10-13 18:30:00) [7]У Вас получается массив вполне известной длины. Можете сами проверить sizeof(TNarray).
Ender (2002-10-13 18:18:00) [8]Массив с изначально не известной длинной
TTCustomDelphiMaster (2002-10-13 18:13:00) [9]Шютка :)
Так что вы хотите получить с помощью этого
N = array [0..2] of integer;
TNarray = array [word] of N;
Ender (2002-10-13 17:53:00) [10]Ошибки?
TTCustomDelphiMaster (2002-10-13 17:47:00) [11]Нопишите по русски что Вы хотите. Очень трудно разобраться в ваших ошибках.
Ender (2002-10-13 17:22:00) [12]Так как TNarray - массив, то N1[0] и N2[0] его составляющие...
Forever (2002-10-13 16:49:00) [13]Э-э-э, а что такое N1[0] и N2[0] ?