Модераторы: volvo877, Snowy, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смещения адреса указателя на n байт вправо/влево, Тип pointer 
V
    Опции темы
Mixasik
Дата 13.12.2006, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Допустим имеется указатель, указывающий на некоторое пространство памяти. Как изменить адрес указателя, чтобы он стал имеющийся адрес +- n байт.
PM MAIL ICQ   Вверх
skyboy
Дата 13.12.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



а если приведение типов использовать:
Код

var p: pointer;
...
p:= pointer(longint(p) + 20);
...

Правдла, можно выйти за пределы сегмента и попасть в следующий. Если это будет неожиданностью - будет неприятно.

PM MAIL   Вверх
Zero
Дата 13.12.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Или это можно сделать, используя представление памяти как массив. Вот пример вывода разных переменных i и i1, указывая одну и туже:
Код

var
  i,i1:integer;
begin
  i  := 10;
  i1 := 20;
  writeln(i);
  memw[seg(i):ofs(i)] := memw[seg(i):ofs(i)+2];
  writeln(i);
end.


Добавлено @ 11:50 
Всё зависит от конкретного случая, что нужно.
PM MAIL ICQ   Вверх
Mixasik
Дата 13.12.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Цитата(Zero @  13.12.2006,  11:49 Найти цитируемый пост)
Всё зависит от конкретного случая, что нужно.


В общем нужно процедуру в которую входит указатель на первый элемент массива, кол-во элементов и тип данных элемента, потом массив болжен заполнять, выводится и т.д...
То есть как я представляю первый элемент имеет адрес например 
3875:86
второй 3875:82 - 3875:78 и т.д... smile 
PM MAIL ICQ   Вверх
Zero
Дата 13.12.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Mixasik, ты перед отправкой, нажми кнопку "Предварительный просмотр" и попробуй сам это прочитать. Если ты себя поймёш, то только тогда отсылай. smile 
PM MAIL ICQ   Вверх
Mixasik
Дата 13.12.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Цитата(Mixasik @  13.12.2006,  15:59 Найти цитируемый пост)
потом массив болжен заполнять, выводится и т.д...

 smile 

Цитата(Zero @  13.12.2006,  16:25 Найти цитируемый пост)
Если ты себя поймёш, то только тогда отсылай.  


В общем я немного напутал. В общем надо заполнять массив любой длины, напрямую переписавыя содержание ячейки памяти, где находится элемент массива, в процедуру входит указатель на первый элемент, количество элементов и тип данных для определения количества памяти, которую занимает каждый элемент...
PM MAIL ICQ   Вверх
Zero
Дата 13.12.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Mixasik @  13.12.2006,  18:38 Найти цитируемый пост)
В общем надо заполнять массив любой длины, напрямую переписавыя содержание ячейки памяти, где находится элемент массива

Да, какого массива??? Этого же самого или другого, или ещё какого нибудь. Скажи полностью что на входе должно быть и что на выходе.
Цитата(Mixasik @  13.12.2006,  18:38 Найти цитируемый пост)
в процедуру входит указатель на первый элемент, количество элементов и тип данных для определения количества памяти, которую занимает каждый элемент...
 А максимальная длина массива определена должна быть или нет?
PM MAIL ICQ   Вверх
Zero
Дата 13.12.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Mixasik @  13.12.2006,  18:38 Найти цитируемый пост)
В общем надо заполнять массив любой длины

Просто слово "любой" длины, не сочетается со словом просто массив, это уже получается динамический массив.
PM MAIL ICQ   Вверх
Mixasik
Дата 13.12.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Цитата(Zero @  13.12.2006,  18:52 Найти цитируемый пост)
Просто слово "любой" длины, не сочетается со словом просто массив, это уже получается динамический массив.



Ну да можно сказать динамический массив...

На входе есть длина массива, тип элементов в массиве, и указатель на первый элемент, на выходе нет ничего, то есть память перезапишется и в массиве будут совсем другие данные...

Максимальная длина это и есть вводимая "n"

Это сообщение отредактировал(а) Mixasik - 13.12.2006, 21:51
PM MAIL ICQ   Вверх
Zero
Дата 14.12.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



У тебя будет работа с односвязными списками:
для этого почетай про них статьи, например:
http://www.de.uspu.ru/Informatics/Metodes/.../lec/lists.html
http://pascal-dobject.chat.ru/Ua/OneWayListBegin.htm
И т.д. в данном случае first и есть указатель на первый элемент.
Вставка, удаление, поиск элемента и т.п. там неплохо рассмотрены, переделать на то что нужно тебе не должно составить большого труда.
PM MAIL ICQ   Вверх
volvo877
Дата 14.12.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Mixasik, собственно, открытый массив тебя чем не устраивает? Необходимостью изобрести свой велосипед? Смотри:

Код
procedure F(var arr: array of integer; const size: integer);
var i: integer;
begin
  { Тут заполняешь чем-то size элементов массива }
  for i := 0 to pred(size) do arr[i] := i;
end;

var
  a: array[2 .. 200] of integer;
  b: array[10 .. 180] of integer;
begin
  { Вызывать можешь так: }
  F(a, 50);

  { А можешь - так: }
  F(b[20], 15)
end.

(само собой, вместо array of integer может быть array of {любой_ранее_описанный_в_программе_тип})

Что не так, как ты написал в задании?
PM MAIL   Вверх
Mixasik
Дата 14.12.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Попробую, я просто хотел, чтобы процедура заполняла массив любого типа, заведомо неизвестного...
Цитата(volvo877 @  14.12.2006,  00:41 Найти цитируемый пост)
Что не так, как ты написал в задании?

А об открытом массиве я не знал, пробывал писать в варе программы выдает ошибку, а в процедурах выходит можно...
Добавлено @ 17:52 
Цитата(Zero @  14.12.2006,  00:28 Найти цитируемый пост)
У тебя будет работа с односвязными списками:для этого почетай про них статьи, например:


Почитаю...

Это сообщение отредактировал(а) Mixasik - 14.12.2006, 18:01
PM MAIL ICQ   Вверх
Nicholas_S
Дата 14.12.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19





--------------------
...все в мире относительно
PM   Вверх
volvo877
Дата 14.12.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Mixasik @  14.12.2006,  16:43 Найти цитируемый пост)
я просто хотел, чтобы процедура заполняла массив любого типа, заведомо неизвестного
Тогда объясни, как ты при заведомо неизвестном типе собрался работать со списками? Допустим, у тебя есть массив целых (20 элементов), массив Double (10), и массив String-ов (100)... Ты пишешь процедуру, которая будет заполнять любой массив (из этих трех, для простоты) какими-то значениями... Так вот в чем, собственно, вопрос: заполнять ЧЕМ ты хочешь элементы массивов (неизвестного типа)? Нулями? Чем строку заполнять будешь? Каким-то определенным значением - тогда расскажи, каким? Пока нет объяснения - это все "гадание на кофейной гуще"...

Nicholas_S, у тебя там присутствует TArrayItem, не будешь ли ты так любезен объяснить, собственно, зачем он присутствует, если автор уточнил, что хочет работать с заранее НЕИЗВЕСТНЫМ типом (если уже даешь ссылку)? 
PM MAIL   Вверх
Nicholas_S
Дата 14.12.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



volvo877, пост был к вопросу о динамическом массиве. Давать совет по поводу вопроса о смещении не буду, потому как основное советы дали, а контекст, в котором будет работать алгоритм, неизвестен, ибо формулировка вопроса очень расплывчата.


--------------------
...все в мире относительно
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.