![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив - как организовать? (без array и на АПИ)
Б. Гейтс © (2007-10-24 21:43:00)Всем привет!
Как организовать массив с помощью функций GlobalAlloc и т.п.?
Нужно, шоб в одном элементе можна было деРЖАТЬ до 256 байтов.
Работаю на чистом апи, даже array не использую!
Если честно, то даже не на паскале и не на Си.
Помогите, кто чем может!
Есть идея:
1) использовать массив DWORD'ов (кол-во пунктов - 256)
2) после использования функций Global*** хранить в пунктах адреса элементов в массиве DWORD'ов
3) в какой-нить переменной хранить кол-во элементов
Ну о-о-о-о-о-очень нужна!
Буду рад любому ответу!
Ins (2007-10-29 12:45:00) [1]
> Юрий Зотов © (29.10.07 00:10) [63]
Браво! Однажды сам наблюдал, как далеко не трезвый мужчина в купе поезда научил 3-летнего ребенка читать, несмотря на всяческие попытки мамы ребенка сопротивляться, но это, пожалуй, даже круче. Не каждому преподавателю дано... Детям очень повезло.
Галинка (2007-10-29 11:58:00) [2]Юрий Зотов © (29.10.07 00:10) [63]
хороший Вы учитель. У нас тоже такой был в школе. При нем мы и ассемблер учили. Но теперь уже все забыла наверное...
Virgo_Style (2007-10-29 07:52:00) [3]Юрий Зотов © (29.10.07 0:10) [63]
Ну, тут и от учителя немало зависит, чтобы не сказать - почти все :-P
Юрий Зотов (2007-10-29 00:10:00) [4]> Галинка © (28.10.07 22:31) [59]
Еще один реальный факт, с Вашего позволения. Когда моя дочь училась в третьем классе, собрали нас, родителей, и сказали - а давайте вести для ребят кружки, кто что умеет.
И выпало мне волею судеб вести кружок программирования. При условии, что ни одного компьютера в школе нет вообще. А программировать на бумаге... да ведь это же третий класс, они ж со скуки помрут моментально.
Что делать? Родилась идея - программируемые микрокалькуляторы. Они тогда были уже распространены, вот ребята и притащили, у кого в семье был. Десяток набралось, а больше и не надо - один на пару-тройку человек, вот их все ОК.
И стали мы учиться на этих машинках программировать. А там, понятное дело, сплошные коды да адреса, и ничего более. Как хочешь - так и объясняй. Третьеклассникам!
И что Вы думаете? Я обалдел - они все понимали!!! Они писали программы, они въехали в мнемонику и в коды команд, в регистры, в instruction pointer, в адреса и переходы, в прямую и косвенную адресацию... ТРЕТИЙ КЛАСС!!! Я ШИЗЕЛ!!!
Нет, я и правда шизел, когда клоп ростом со стол объяснял мне свою программу почти буквально в таких словах: "Здесь я сохраняю регистр X в ячейке памяти с адресом 4, потому что сейчас начнется ввод и регистр X будет затерт, а в нем находится адрес перехода, который понадобится на шаге 25 и поэтому его надо сохранить".
И ведь все правильно говорил, вот в чем главный фокус-то. Хотя, чего б ему и ошибаться, если эту программу он же сам и написал?
О как! А то - массивы...
:о)
Zeqfreed (2007-10-28 23:51:00) [5]> vpbar © (28.10.07 23:47) [61]
> Если вы про указатели, то не нужны.
> В тех языках где нет массива... ...есть
> указатели его можно эмулировать
Логика шикарная :)
vpbar (2007-10-28 23:47:00) [6]>>Галинка © (28.10.07 22:31) [59]
>>а для передачи массивов в качестве параметра функции?
Если вы про указатели, то не нужны. Для понимания механизма, может быть. Но для понимания логики программы - совсем лишнее.
Это забота компилятора передать параметр наиболее оптимальным способом.
В тех языках где нет массива - (в lisp-е чтоли) - а есть указатели его можно эмулировать. Собственно я уже повторяюсь.
>>Крыша от этого изобилия поедет
А вы по полочкам раскладывайте.
Zeqfreed (thief) (2007-10-28 23:40:00) [7]> Галинка © (28.10.07 22:31) [59]
От красно-черных деревьев, наверное, вообще мутнеет в глазах и шарики за ролики закатываются? :)
Галинка (2007-10-28 22:31:00) [8]Юрий Зотов © (28.10.07 06:55) [58]
я бы наверное так тоже хотела. Тот же человек порекомендовал почаще смотреть в ассемблерный код отладчика. Но пока для меня там китайская грамота. Хотя Эклипс и выдает его весьма охотно. Будем грызть... )))
vpbar © (26.10.07 22:31) [56]
а для передачи массивов в качестве параметра функции? В тех языках, где нет класса array? Мне кажется именно поэтому то и дело возникают непонятки с указателями/ссылками/новыми типами указателей (в Си++, например). А еще есть понятие индексированный список... Крыша от этого изобилия поедет ((
Юрий Зотов (2007-10-28 06:55:00) [9]> Galinka © (26.10.07 21:43) [55]
Странный аргумент... человек высказал свое мнение, и только. Другой, не менее авторитетный человек с таким же успехом скажет обратное - и что? Это тоже аргумент?
Значицца, так... с учетом известной нам аудитории могу привести следующий факт (заметьте - не мнение там чье-то, а реальный факт, с коим не поспоришь).
Понятно, что к этой самой аудитории все мы когда-то принадлежали, и я в том числе. Так вот - эту самую нашу аудиторию, состоящую примерно из 20 человек тогдашних девятиклассников, обычных учеников обычной школы, учили программировать... напрямую в машинных кодах (!!!). А самое интересное, что не только учили, но и реально научили. И не избранных, а всех. И все прекрасно поняли, что такое команды, данные, адресация и все прочее.
Значит - можно? Значит, можно. И не слишком? И не слишком.
А Вы говорите - массивы...
:о)
Б. Гейтс (2007-10-27 08:45:00) [10]
> Массив достаточно абстрактная весчь. Вот для реализации
> (иммитации) массивов на тех языках где его нет, приходится
> пользоваться указателями.
Поэтому я попросил помощи у вас.
Всем огромное спасибо! Все реально помогли!
Что это за возвращаемое значение у функции GlobalAlloc? Т. е. хэндл чего? Я раньше думал, что хэндл бывает лишь у окон.
GlobalLock - возвращает указатель памяти, кот. я зарезервировал с помощью GlobalAlloc.
GlobalReAlloc - изменяет размер памяти. После этой функции следует ли еще раз вызывать GlobalLock?
Если я чего-то недопонимаю, объясните плиз..
vpbar (2007-10-26 22:31:00) [11]>>Galinka © (26.10.07 21:43) [55]
ИМХО человек прав. Для понимания как использовать хеши тоже нужно знать адресацию и указатели? Нет, по- моему не нужно.
Массив достаточно абстрактная весчь. Вот для реализации (иммитации) массивов на тех языках где его нет, приходится пользоваться указателями.
Galinka (2007-10-26 21:43:00) [12]Юрий Зотов © (26.10.07 11:16) [38]
если человек в школе массивы проходил, то там редко говорят, как оно все устроено (( Просто говорят, что есть такая структура. Кроме того, не далее как сегодня, говорила с одним товарищем, который достаточно глубоко знает Си. Выполняет на нем достаточно нетривиальные проекты. Но когда я сказала. что понимание массивов невозможно без понимания указателей и адресации, он сказал, что это слишком сложно типа для первого понимания массивов. (Конечно с учетом известной нам аудитории).
Б. Гейтс (2007-10-26 16:15:00) [13]
> "программировании на API" это требуется :)
Кхе-кхе... я только спросил.
Ins (2007-10-26 16:07:00) [14]
> Страница памяти....Не заморачивайся, на мой взгляд это интересно
> только виндовс, хотя может и ошибаюсь....
Неправильно понял фразу, сорри. Но все равно, лучше знать что такое страница памяти, иногда даже в "программировании на API" это требуется :)
Ins (2007-10-26 16:00:00) [15]
> Апи бывает не только вин....В линухе тоже есть Апи....Для
> опенГЛ и СаундБластера тоже есть апи....
Можно еще про разные подсистемы (POSIX, OS/2) на базе Windows вспомнить, про NativeAPI - это тоже API, только не Win32. Да и вообще, API очень широкое понятие.
> Страница памяти....Не заморачивайся, на мой взгляд это интересно
> только виндовс, хотя может и ошибаюсь....
Ошибаетесь. Разбиение памяти на страницы поддержывается аппаратно процессором.
В общем, товарищу Гейтсу рекомендуется почитать книжки и найти ответы на свои вопросы.
barmaglo (2007-10-26 15:50:00) [16]Апи бывает не только вин....В линухе тоже есть Апи....Для опенГЛ и СаундБластера тоже есть апи....
Динамическая память, это выделение памяти во время выполнения программы, те же массивы изменяемого размера, списки и т.д.
Страница памяти....Не заморачивайся, на мой взгляд это интересно только виндовс, хотя может и ошибаюсь....
Ega23 (2007-10-26 15:49:00) [17]
> Только не совсем понял отличие Win32API от API.
ANSI SQL - стандартизованное API для доступа к данным в СУБД
@!!ex (2007-10-26 15:36:00) [18]> Только не совсем понял отличие Win32API от API.
Я пиуш на OPenGL API. Которое не имет НИКАКОГО отношения к WinAPI и Windows в частности. ОДнакто тоже явялется API.
Б. Гейтс (2007-10-26 15:21:00) [19]Всем огромное спасибо!
Теперь я с массивами на "вы"
> @!!ex © (26.10.07 13:02) [43]
Спасибо за пример, проверю попозже, щас времени нет.
> Кодером - да, программистом - пока не вижу.
Стоит лимне идти в программеры? У всех ведь ошибки бывают.
> Например ножки микросхемы - типичный пример интерфейса.
Все отлично понял! (это я так думаю)
Только не совсем понял отличие Win32API от API.
И динамическую память не понял.
Ааа!! Забыл! Я же еще не знаю, что такое страница памяти! (если это в тему)
Итог:многого не знаю.
Маша Шрайбер (2007-10-26 14:36:00) [20]>> Б. Гейтс (26.10.07 12:47) [41]
>> Но шансов стать кодером у меня больше, не так ли?
Только шкодером. Но им вы уже стали.