Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.09;
Скачать: CL | DM;

Вниз

как получить строку по указателю   Найти похожие ветки 

 
redlord   (2006-06-17 18:06) [0]

всем привет
у меня есть переменная тип integer
в ней лежит указатель на строку (string), как получить строку?


 
tButton ©   (2006-06-17 18:16) [1]

удивительно, а как он туда поместился?


 
palva ©   (2006-06-17 18:25) [2]

{$APPTYPE CONSOLE}
var
 s1, s2: String;
 i: Integer;
Begin
 s1 := "Proba";
 i := Integer(@s1);
 s2 := PString(i)^;
 WriteLn(s2); // Proba
End.


 
StriderMan ©   (2006-06-17 18:38) [3]


> удивительно, а как он туда поместился?

а в чем сложность, те же 4 байта.

я иногда пользуюсь TComponent.Tag для хранения указателей на все что угодно


 
tButton ©   (2006-06-17 18:54) [4]


> а в чем сложность, те же 4 байта.

но значимых битов только 31 если я всё правильно перепутал?
выходит, что половина адресов не влезает
или у машины на этот счёт особое мнение?


 
Пусик ©   (2006-06-17 19:04) [5]

> но значимых битов только 31


Почему?


 
Virgo_Style ©   (2006-06-17 19:04) [6]

tButton ©   (17.06.06 18:54) [4]

Что такое "(не)значимый бит" применительно к указателю?


 
sniknik ©   (2006-06-17 19:06) [7]

WParam, LParam в TMessage (параметр сообщений системы) тоже интежер, но тем не менее указатели в них при нужде передают

> но значимых битов только 31 если я всё правильно перепутал?
попутал, знак тоже значимый... (если это ты его "отнял")


 
tButton ©   (2006-06-17 19:13) [8]

ну да =)
фактически Integer принимает значения от -2^31 до +(2^31-1)
хотя если машина интерпретирует последовательность бит не обращая внимания на тип переменной, то вопрос снимаю =)


 
Asail   (2006-06-17 19:15) [9]


> хотя если машина интерпретирует последовательность бит не
> обращая внимания на тип переменной

Если бы обращала - фиг она бы тебе дала в интегер указатели на строки пихать :-)


 
Asail   (2006-06-17 19:18) [10]

А, вообще, не нравится мне такой подход. Вот, к примеру, захочешь перенести сей код (когда-нибудь) на 64-битную операционку... ИМХО - весело будет...


 
sniknik ©   (2006-06-17 19:22) [11]

> хотя если машина интерпретирует последовательность бит не обращая внимания на тип переменной
машина зачастую даже не догадывается о типах в языке... а большинство делфевских типов это просто "разграничители" для контроля программистов. с этим можно делать то и интерпретировать так, а вот с этим другое и по другому... хотя в машинном представлении это одно и тоже. (пример тот же pointer-integer, byte-char, int64-currency)


 
DevilDevil ©   (2006-06-17 23:25) [12]

Господи, смилуйся над этими грешниками...

function GetStr(P : integer) : string;
begin
  Result := pchar(P);
end;


 
redlord   (2006-06-18 12:30) [13]

to DevilDevil
если я не ошибаюсь то перед применением ентой функции
переменную стринг нужно подготовить тобиш указать ей размер
а это не всегда возможно так как он не известен

var s:string[255];
begin
s:=getstr(p);
...
end;


 
DevilDevil ©   (2006-06-18 14:20) [14]

> если я не ошибаюсь
Ошибаешься, не указывай длинну, если этого не требуется


 
ЮЮ ©   (2006-06-19 03:49) [15]

string это и есть указатель на "строку". Integer сюда ещё зачем приплетать? Более того, с подсчетом ссылок. И если получить указатель на локальную string, как у тебя, то очень скоро это ссылка будет "битой"



Страницы: 1 вся ветка

Текущий архив: 2006.07.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.072 c
15-1149949840
tesseract
2006-06-10 18:30
2006.07.09
процессорные байки.


1-1148534204
QwertyKz
2006-05-25 09:16
2006.07.09
Ресурсы и диалоги


1-1148800591
serg128
2006-05-28 11:16
2006.07.09
Как сконвертить строку в base64?


2-1150978818
Rembo
2006-06-22 16:20
2006.07.09
Zeos lib. Помогите с ошибкой.


15-1149860076
StriderMan
2006-06-09 17:34
2006.07.09
Можно ли написать прогу для PIC-контроллера на Делфи?