Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.24;
Скачать: CL | DM;

Вниз

Динамическая память   Найти похожие ветки 

 
Ender   (2002-10-13 16:32) [0]

Чё-то я торможу... Дано
type
N = array [0..2] of integer;
TNarray = array [word] of N;
PNarray = ^TNarray;
end;
var
N1, N2 : PNarray;
........

Подскажите пожалуйста как сравнить значения, например N1[0] и
N2[0] ? Премного благодарен.


 
Forever   (2002-10-13 16:49) [1]

Э-э-э, а что такое N1[0] и N2[0] ?


 
Ender   (2002-10-13 17:22) [2]

Так как TNarray - массив, то N1[0] и N2[0] его составляющие...


 
TTCustomDelphiMaster ©   (2002-10-13 17:47) [3]

Нопишите по русски что Вы хотите. Очень трудно разобраться в ваших ошибках.


 
Ender   (2002-10-13 17:53) [4]

Ошибки?


 
TTCustomDelphiMaster ©   (2002-10-13 18:13) [5]

Шютка :)
Так что вы хотите получить с помощью этого
N = array [0..2] of integer;
TNarray = array [word] of N;


 
Ender   (2002-10-13 18:18) [6]

Массив с изначально не известной длинной


 
TTCustomDelphiMaster ©   (2002-10-13 18:30) [7]

У Вас получается массив вполне известной длины. Можете сами проверить sizeof(TNarray).


 
Anatoly Podgoretsky ©   (2002-10-13 18:36) [8]

65536*6*4 байт


 
Юрий Зотов ©   (2002-10-13 18:40) [9]

> Массив с изначально не известной длинной

type
TNArray = array of N;

См. dynamic arrays в справке.

А Ваш

TNarray = array [word] of N

это массив с ИЗВЕСТНОЙ длиной. Его длина - 65535 элементов. И всю эту память он сразу сожрет, как только Вы вызовете New. И нельзя будет ни добавить, ни удалить элемент, можно только отслеживать количество фактически заполненных элементов.

А сравнивать в Вашем варианте можно так:

if N1^[0][0] > N2^[0][0] then...

Только массивы должны быть, конечно, уже размещены, а индексация должна быть двойной (у Вас же N1 и N2 - это УКАЗАТЕЛИ на ДВУМЕРНЫЕ массивы).


 
Forever   (2002-10-13 18:51) [10]

Так как 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 ...

Это произойдет, если все иъ элменты равны


 
Anatoly Podgoretsky ©   (2002-10-13 18:56) [11]

Так правильнее 65536*3*4 байт, но это не существенно.


 
MBo ©   (2002-10-13 21:59) [12]

Массивы переменной длины указанным образом объявлять можно, работая с ними c помощью AllocMem и т.п. функций, но требуется это лишь в специальных случаях, например, при манипуляциях с некоторыми структурами Windows API.
В остальных же случаях обычно достаточно, как уже отметили, динамических массивов с их SetLength.


 
Anatoly Podgoretsky ©   (2002-10-13 22:05) [13]

Возможно даже подойдет статический двухменый массив, а не массив массивов



Страницы: 1 вся ветка

Текущий архив: 2002.10.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-78401
Dim!S
2002-10-15 13:31
2002.10.24
Смена раскладки 3


6-78579
Le!
2002-08-20 08:32
2002.10.24
Вопрос: Как не потерять данные при разрыве связи?


3-78245
explorer
2002-10-02 12:24
2002.10.24
FastReport и Query


3-78208
Sergey-ZZZ
2002-10-04 11:24
2002.10.24
ADOQuery


14-78656
michael_b
2002-10-04 17:23
2002.10.24
Мастера подскажите книгу по БД&Delphi.