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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изъять адрес переменной? Аналог addr() 
V
    Опции темы
ColdSpirit
Дата 30.3.2013, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как сделать так, чтобы при передаче в функцию или процедуру переменной, внутри можно было изъять ее адрес?
Есть стандартная функция addr(), она возвращаяет адрес, но ее код я не смог найти.
PM MAIL   Вверх
586
Дата 30.3.2013, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Передавай параметр как ссылку или указатель.

Код
procedure test(var value:Integer);       // ссылка
procedure test(pValue:PInteger);         // указатель

PM   Вверх
Illusion Dolphin
Дата 30.3.2013, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Адрес можно получить через Addr или @. Код этой функции смотрть надо в дезасемблерре. 

Код


procedure testa(var value:Integer);       // ссылка
begin
  value := 10;
  ShowMessage(IntToStr(NativeInt(Addr(Value))));  //выводим адрес переменной
  ShowMessage(IntToStr(NativeInt(@Value)));  //выводим адрес переменной
end;
procedure testb(pValue:PInteger);         // указатель
begin
  pValue^ := 10;
  ShowMessage(IntToStr(NativeInt(pValue))); //выводим адрес переменной
end;

procedure TForm45.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  //обе функции с точки зрения процессора одинаковы на 100%
  testa(I);
  testb(@I);
end;



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
ColdSpirit
Дата 30.3.2013, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



586, Про ссылки не знал, мучился с указателями. Спасибо огромное!  smile

Добавлено через 7 минут и 41 секунду
Illusion Dolphin, спасибо! В интернете про ссылки нереально ничего найти, все про указатели говорят.

Добавлено через 10 минут и 8 секунд
Вопрос решен =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

1. Публиковать ссылки на вскрытые компоненты

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

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


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

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


 




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


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

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