![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| Mixasik |
|
|||
|
Little Delphi monstr ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 4.10.2006 Где: Волгоград Репутация: нет Всего: нет |
Допустим имеется указатель, указывающий на некоторое пространство памяти. Как изменить адрес указателя, чтобы он стал имеющийся адрес +- n байт.
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
а если приведение типов использовать:
Правдла, можно выйти за пределы сегмента и попасть в следующий. Если это будет неожиданностью - будет неприятно. |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Или это можно сделать, используя представление памяти как массив. Вот пример вывода разных переменных i и i1, указывая одну и туже:
Добавлено @ 11:50 Всё зависит от конкретного случая, что нужно. |
|||
|
||||
| Mixasik |
|
|||
|
Little Delphi monstr ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 4.10.2006 Где: Волгоград Репутация: нет Всего: нет |
В общем нужно процедуру в которую входит указатель на первый элемент массива, кол-во элементов и тип данных элемента, потом массив болжен заполнять, выводится и т.д... То есть как я представляю первый элемент имеет адрес например 3875:86 второй 3875:82 - 3875:78 и т.д... |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Mixasik, ты перед отправкой, нажми кнопку "Предварительный просмотр" и попробуй сам это прочитать. Если ты себя поймёш, то только тогда отсылай.
|
|||
|
||||
| Mixasik |
|
|||
|
Little Delphi monstr ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 4.10.2006 Где: Волгоград Репутация: нет Всего: нет |
В общем я немного напутал. В общем надо заполнять массив любой длины, напрямую переписавыя содержание ячейки памяти, где находится элемент массива, в процедуру входит указатель на первый элемент, количество элементов и тип данных для определения количества памяти, которую занимает каждый элемент... |
|||
|
||||
| Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Да, какого массива??? Этого же самого или другого, или ещё какого нибудь. Скажи полностью что на входе должно быть и что на выходе.
|
||||
|
|||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
||||
|
||||
| Mixasik |
|
|||
|
Little Delphi monstr ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 4.10.2006 Где: Волгоград Репутация: нет Всего: нет |
Ну да можно сказать динамический массив... На входе есть длина массива, тип элементов в массиве, и указатель на первый элемент, на выходе нет ничего, то есть память перезапишется и в массиве будут совсем другие данные... Максимальная длина это и есть вводимая "n" Это сообщение отредактировал(а) Mixasik - 13.12.2006, 21:51 |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
У тебя будет работа с односвязными списками:
для этого почетай про них статьи, например: http://www.de.uspu.ru/Informatics/Metodes/.../lec/lists.html http://pascal-dobject.chat.ru/Ua/OneWayListBegin.htm И т.д. в данном случае first и есть указатель на первый элемент. Вставка, удаление, поиск элемента и т.п. там неплохо рассмотрены, переделать на то что нужно тебе не должно составить большого труда. |
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Mixasik, собственно, открытый массив тебя чем не устраивает? Необходимостью изобрести свой велосипед? Смотри:
(само собой, вместо array of integer может быть array of {любой_ранее_описанный_в_программе_тип}) Что не так, как ты написал в задании? |
|||
|
||||
| Mixasik |
|
|||
|
Little Delphi monstr ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 4.10.2006 Где: Волгоград Репутация: нет Всего: нет |
Попробую, я просто хотел, чтобы процедура заполняла массив любого типа, заведомо неизвестного...
А об открытом массиве я не знал, пробывал писать в варе программы выдает ошибку, а в процедурах выходит можно... Добавлено @ 17:52
Почитаю... Это сообщение отредактировал(а) Mixasik - 14.12.2006, 18:01 |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 19 |
-------------------- ...все в мире относительно |
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
Nicholas_S, у тебя там присутствует TArrayItem, не будешь ли ты так любезен объяснить, собственно, зачем он присутствует, если автор уточнил, что хочет работать с заранее НЕИЗВЕСТНЫМ типом (если уже даешь ссылку)? |
|||
|
||||
| Nicholas_S |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 12.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 19 |
volvo877, пост был к вопросу о динамическом массиве. Давать совет по поводу вопроса о смещении не буду, потому как основное советы дали, а контекст, в котором будет работать алгоритм, неизвестен, ибо формулировка вопроса очень расплывчата.
-------------------- ...все в мире относительно |
|||
|
||||
| Mixasik |
|
|||
|
Little Delphi monstr ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 4.10.2006 Где: Волгоград Репутация: нет Всего: нет |
Пользователь сам бы записывал значения в память те, что ему надо и знал бы потом. какой тип ему надо считывать... Но в общем открытый массив меня устраивает, спасиобо за помощь... |
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
А можно сделать вариантную структуру.
Одно поле LongInt, а второе Pointer, так чтобы они наложились друг на друга. Пишешь в pointer адрес, а смещение прибавляешь к LongInt. Или не страдать фигней с BP, используется же он, (если, конечно, преподы не заставляют) т. к. в Delphi для перевода указателя в целое Integer(p) p:=pointer(Integer(p)+Offset); -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |