Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
15-1150086213
Александр Иванов
2006-06-12 08:23
2006.07.09
Модальное окно не закрывается при нажатии Ctrl+F4


15-1149849028
iamdanil
2006-06-09 14:30
2006.07.09
RS Stereo Image 2006


1-1148300012
Schooler
2006-05-22 16:13
2006.07.09
Как правильно реализовать эффект


1-1148733499
parovoZZ
2006-05-27 16:38
2006.07.09
Цикл обработки сообщений Application


15-1150036998
PZ
2006-06-11 18:43
2006.07.09
Путь по умолчанию





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский