слышал ли ты об ассоциативных массивах?? хотя и так ясно.....
Я же говорю, что делает делфи с людьми. Массив - сам по себе, без всяких высокоуровневых хреновин - просто набор. Динамический, статический - никакого знаения не имеет, кто отделил под него память-загрузчик карты бинарника или процесс)
если массив динамический это не значит что КОЛИЧЕСТВО ЭЛЕМЕНТОВ НЕ ФИКСИРОВАНО... эт значит что количество элементов задается НЕ ПРИ КОМПЕЛЯЦИИ, а
после того как используется функция ГЕТМЕМ или СЕТЛЕНЗ... т.е. количество элементов ЗАДАЕТСЯ (фиксируется) динамически... и не более того ИМХО...
Гетмем? Не видел такой ф-ии в kernel32.dll. К слову, GlobalAlloc, GlobalFree, VirtualAlloc, VirtualAllocEx, и ещё пару ф-ий. Эти ф-ии выделяют память, после чего ее можно использовать. Если у тебя уже выделеные блоки памяти, это тоже массивы. Байтов, WORD'ов, DWORD'ов. Массив размещается в стеке:
Код:
void Func( void )
{
BYTE block[10];
BYTE block[] = "...";
BYTE block[5] = "1234"; // после всего будет 0x00
...
}
Код:
так если судить по вашим определениям запись ничем от массива не отличается.
ничем.
и вообще, какая запись? БРОСАЙ ДЕЛФИ СРОЧНО.
на счет того что элементы массива бывают разных типов
помидоры, которые я продаю тоже есть разных типов. Но все они - помидоры.
Так и тут - все байты. Если ты отделишь память под 10 эл-ов массива, каждый - структура
struct s
{
DWORD a;
DWORD b;
}
То, у тебя будет (sizeof( DWORD ) * 2 ) * 10. Смысл в этом. Остальное делает компилятор. Открой свою прогу отладчиком и посмотри что генерируется. Все можно сделать вообще без стуктур и массивов, просто используя указатель на выделеный блок, размера (sizeof( DWORD ) * 2 ) * 10
глупейшее определение. Бывают массивы динамические, бывают массивы с элементами разных типов. Под это ламерское определение они не попадают.
Наверное мы говорим о разных массивах. Я-о естественных для меня, а ты, о каких-нибудь в питоне, перле или тому подобное)) На самом деле, из всего что я сказал, следует что массив всегда имеет один размер, только из-за того, что пока указатель на его N'ный эл-т не попадет в невыделеную область или ещё хрен знает куда, что просто вызовет исключение. Можно использовать 5 эл-т массива, хотя определно всего 2 )
BYTE test1, test2;
BYTE arr[2];
BYTE test1, test2;
пожалуйста, используй, например, arr[3] )
только такого компилятор недопустит... так что надо не явно указывать...
например для возврата значения ф-ии.
ф-ия возвращает значение - это значит, она в AX/EAX записала число