Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 14.12.2008, 18:12   #1
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию Адрес переменной

Допустим у меня есть переменные
s:string;
p: pointer;
p:=@s; - получается в p адрес переменной s (так?), а как этот адрес вывести в мемо например. Заранее спасибо.
Pedro вне форума Ответить с цитированием
Старый 14.12.2008, 19:07   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

не не так... Вы не правы. S: String - это и есть ссылка тобиш указатель надо просто преобразовать тип а не получать адрес. Т.е... для вывода в TMemo ->>>

Код:
var
  s: String;
  addr: DWord;

addr := DWord(Pointer(s));

TMemo.Lines.Add(Format('0x%.8x', [addr]));
Если ничего не напутал я с форматом то в мемо появиться новая строка вида 0xFF0a0FB3
BOBAH13 вне форума Ответить с цитированием
Старый 14.12.2008, 19:09   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,234
По умолчанию

Memo1.Lines.Add (DWORD (P)); - покажет? Сам не проверял.
Arigato вне форума Ответить с цитированием
Старый 14.12.2008, 19:20   #4
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

Допустим, есть переменная integer, если я узнаю ее адрес, я смогу изменить ее из другой программы?
Pedro вне форума Ответить с цитированием
Старый 14.12.2008, 19:25   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,808
По умолчанию

нет, не сможешь.
rpy3uH вне форума Ответить с цитированием
Старый 14.12.2008, 19:30   #6
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

А почему? Обьясните если не трудно. Я думал, что мы получаем адрес памяти и записываем значения именно в эту область памяти, тогда и в другой программе мы можем получать значения из этой области. Походу я не правильно думал. А как это можно реализовать? В какую сторону думать? Подскажите пожалуйста.
Pedro вне форума Ответить с цитированием
Старый 14.12.2008, 21:28   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,808
По умолчанию

вот здесь я уже "распинался" по этому поводу
rpy3uH вне форума Ответить с цитированием
Старый 14.12.2008, 23:47   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,157
По умолчанию

to BOBAH13

Цитата:
не не так... Вы не правы. S: String - это и есть ссылка тобиш указатель
у переменной S тоже есть какой-то адрес, так что @s вполне допустимая операция будет указатель на ссылку.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.12.2008, 00:07   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
to BOBAH13
у переменной S тоже есть какой-то адрес, так что @s вполне допустимая операция будет указатель на ссылку.
Ну вот меня опять обижают ну да ладно.. смогу за себя постоять

даже исходя из простого ->

PCHAR(String) - даст строку как вам кажется... PCHAR(String)^ - получаем символ... но если мы использовали ^ тогда мы указывали адрес, значит PCHAR - указатель.. следовательно Pointer = PCHAR и значит... Pointer(String) - и есть указатель... а то что вы предлагаете @String - ну даже говорить не буду... вы просто попробуйте из такого адреса выудить хоть один Char преобразовать адрес в другой тип данных или получить адрес разные вещи...

и серьезно... перед тем как писать подобные сообщения напишите чем они обоснованы

p.s. даже если вы щас начнете писать тут всякие высказывания сразу приведу код

есть форма и есть глобальная переменная S: String = 'Hello World!';

и есть кнопка по нажатии на которой первый символ данного адресса из p: PCHAR выведится в заголовок формы...

Код:
  
var
  s: String = 'Hello World!';

implementation

procedure TForm1.Button1Click(Sender: TObject);
var
  p: PCHAR;
begin
  // мой вариант
  // p := Pointer(s);

  // ваш вариант
  p := @s;

  caption := p^; // собственно вывод

end;
Сравните вывод вывилась ли буква "H" ?

Последний раз редактировалось BOBAH13; 15.12.2008 в 00:13.
BOBAH13 вне форума Ответить с цитированием
Старый 15.12.2008, 08:53   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,808
По умолчанию

ВОВАН13 прав.
Цитата:
Сообщение от evg_m Посмотреть сообщение
у переменной S тоже есть какой-то адрес, так что @s вполне допустимая операция будет указатель на ссылку.
S это уже указатель! string, PCHAR, pointer это по сути одно и тоже, и не понимаю почему Borland сделала эти типы несовместимыми. Операцией @S мы получаем указатель на указатель.
Исключение это Shortstring
например S:string[20]; операцией @S мы получим указатель на строку.
rpy3uH вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IP адрес SERG1980 Работа с сетью в Delphi 2 25.07.2008 14:54
Ip адрес delphin100 Win Api 4 08.01.2008 21:55
IP адрес delphin100 Общие вопросы Delphi 8 12.12.2007 13:18
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 19:47
как узнать ip адрес зная mac адрес Roman Работа с сетью в Delphi 9 25.06.2007 11:39


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS