Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
3-78253
Prooksius
2002-10-02 10:25
2002.10.24
Не работает запрос...


14-78655
sancho
2002-10-04 21:38
2002.10.24
Help для RxLib


1-78417
TAN
2002-10-15 16:18
2002.10.24
как в TreeView узнатть индекс выделенного узла?


1-78356
Юрий К
2002-10-13 23:51
2002.10.24
Динамическое создание компонентов


8-78532
GOGA44
2002-06-28 00:29
2002.10.24
шар





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский