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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Укразатели, срочно нужна помощ 
:(
    Опции темы
Diesel Draft
Дата 10.7.2005, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

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



Припустим у меня есть указатель P. Мне надо увидеть (string, integer...) што в ньом записано. И Потом перетворить обратно з "видемого" типа в укразель. ТОпто я хочу читать и вручную укразевать даные для укрателя.


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
vadims
Дата 10.7.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что значит 'увидеть' ???



--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Guest
Дата 10.7.2005, 14:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ShowMessage(DWord(P))
  Вверх
TP@MB@Y
Дата 10.7.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Diesel Draft

Если допустим у тебя есть указатель на произвольный тип (т.е. любой):
Код

var p: ^Type; 


То чтобы обратиться к информации на которую он указывает надо: p^
т.е. если info имеет тип Type, то чтобы присвоить значение на которое ссылается указатель p надо так:
Код

info:=p^

PM   Вверх
Chrisstoff
Дата 10.7.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.5.2005
Где: Hell... жудкое ме сто

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



Мыж таки русские люди должны понимать друг друга ... но это ... ну вощем ладно ...
ну а чём проблема то ... я так понимаю что когда афтор говорит "указатель P"... то подрузамевается указатель на не определённый тип ... тобишь Pointer. Вот ну а прокастовать его уже к указателю на конкретный тип помом ничё сложного ....
Код

var
    p: Pointer;
    pint: ^Integer;
....
    pint := p;
    Writeln(pint^);

PM MAIL ICQ   Вверх
Romtek
Дата 10.7.2005, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Diesel @ 10.7.2005, 13:22)
у меня есть указатель P. Мне надо увидеть (string, integer...) што в ньом записано.
Если указатель нетипизированный, узнать содержимое указателя нельзя, хотя можно с помощью кастинга привести к любому типу.
Код

var
  p: pointer;
...
  writeln (PChar(p)^);
  writeln (PInteger(p)^);


Для типизированных указателей же всё проще: никакого кастинга вообще не надо.
Код

var
  p: pinteger;
...
  writeln (p^);

--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
Diesel Draft
Дата 11.7.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

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



припустим указател указевает на адрес 11223344
мне надо увидеть или вручную указать куда имено он указевает



--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
TP@MB@Y
Дата 11.7.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Diesel Draft
Т.е. тебя интересут сам адрес? Если так, то он содержится непосредственно в указателе (как это не парадоксально) - 4 байта. Присваивай какой хочешь адрес и выводи на экран если хочешь посматреть. В чем проблема? smile
PM   Вверх
Diesel Draft
Дата 12.7.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

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



Как мне увидеть какой имено там адрес?


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
TP@MB@Y
Дата 12.7.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Diesel Draft
Походу просто так не вывести.

Попробуй поюзать функции определения сегмента и смещения. Seg() Ofs()
PM   Вверх
Chrisstoff
Дата 12.7.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.5.2005
Где: Hell... жудкое ме сто

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



TP@MB@Y
Цитата
Т.е. тебя интересут сам адрес? Если так, то он содержится непосредственно в указателе (как это не парадоксально) - 4 байта. Присваивай какой хочешь адрес и выводи на экран если хочешь посматреть. В чем проблема? 


Если я ничего не путаю то присваивать указателю "какой хочешь адрес" нельзя!
PM MAIL ICQ   Вверх
TP@MB@Y
Дата 12.7.2005, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Chrisstoff
Проверил в паскале. Действительно нельзя.

Diesel Draft
Если не секрет, для чего вам надо знать конкретный адрес?
Если вы хотите работать с памятью на низком уровне - юзайте асемблер (встроенный в паскаль).
PM   Вверх
Diesel Draft
Дата 13.7.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

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



У меня меню создано на основе TWebBrozer
припусти я хочу удалить елемент з списка созданого на основе указалелей. Так как список постоянно загружаетса и сортуетса я не можу работать припустим з порядковыми нолмерамы. Я ести я передам з браузера даные припустим "Del FF7812" и приму их то вся проблема решена


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
TP@MB@Y
Дата 13.7.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Diesel Draft
Насколько я понял, вы "копаете не там где надо" smile

Для работы с динамической цепочкой не нужно знать физический адрес, содержащийся в указателе какогото звена.
Все делается намного проще. Вот модуль, написанный мной, для работы с динамической цепочкой:
Код

unit dinamic;

interface

type pElem=^Elem;
     Elem=record
             st:string;
             next:pElem;
             flag:boolean
          end;

procedure del(var p:pElem;k:word);
procedure add(var p:pElem;s:string);
procedure addin(var p:pElem;k:word;s:string);
function info(p:pElem;k:word):string;
function adres(p:pElem;k:word):pElem;
function count(p:pElem):word;

implementation

{Функция возвращает количество элементов в цепочке}
function count(p:pElem):word;
var i:word;
begin
 if p=nil then count:=0
 else begin
       i:=0;
       while p<>nil do
        begin
         p:=p^.next;
         i:=i+1
        end;
       count:=i
      end
end;

{Функция возвращает указатель на К-ый элемент}
function adres(p:pElem;k:word):pElem;
var i:word;
begin
 i:=1;
 while (p<>nil)and(i<k) do
  begin
   i:=i+1;
   p:=p^.next
  end;
 adres:=p
end;

{Функция возвращает строку К-ого элемента}
function info(p:pElem;k:word):string;
var q:pElem;
begin
 q:=adres(p,k);
 if q<>nil then info:=q^.st
           else info:=''
end;

{Процедура вставки элемента в цепочку}
procedure addin(var p:pElem;k:word;s:string);
var n,p1:pElem;
    i:word;
begin
 if k=1 then begin
              new(n);
              n^.st:=s;
              n^.flag:=false;
              n^.next:=p;
              p:=n
             end
 else begin
       p1:=adres(p,k-1);
       if p1<>nil then begin
                        new(n);
                        n^.st:=s;
                        n^.flag:=false;
                        n^.next:=p1^.next;
                        p1^.next:=n
                       end
      end
end;

{Процедура добавления элемента в конец цепочки}
procedure add(var p:pElem;s:string);
var q:pElem;
begin
 new(q);
 q^.st:=s;
 q^.flag:=false;
 q^.next:=p;
 p:=q
end;

{Процедура удаления элемента из цепочки}
procedure del(var p:pElem;k:word);
var q:pElem;
    i:word;
begin
 if k=1 then begin
              q:=p;
              p:=p^.next;
              dispose(q)
             end
 else begin
       q:=adres(p,k);
       adres(p,k-1)^.next:=q^.next;
       dispose(q)
      end
end;

END.


Там он привязан к типу Elem, но ты можешь заменть на любой - принцип работы остается неизменным.
PM   Вверх
Diesel Draft
Дата 13.7.2005, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

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



Ето простой стандартный список. Такой так и у меня. а мне надо
ПРистутим

Припустим у нас есть указатель Р и любая переменная М.
Р := @М;

как мне узнать какой имено адрес знаходетса в Р. Надо прочетать не значение М а только адрес. Надо перевести его в стринг или в интеджер



--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

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

3. Оффтопить

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

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

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


 




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


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

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