![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Pchar(s)^
Vitec © (2008-04-15 19:18:00)подскажите пожалуйста, что означает запись: PChar(S)^
s- типа string PChar(S) - преобразуем строку в тип Pchar, а вот что означает значек ^ в конце?
Vitec (2008-04-15 21:01:00) [21]Тогда еще вопрос, что такое плавающий AV? и почему s[1] может не прокатить?
P.s. про указатели уже почти дочитал :)
tesseract (2008-04-15 20:42:00) [22]
> мы хитро на уровне compiler magic приводим string к pchar
> и спокойно разименовываем
Такие привычки надо ликвидировать, но тут сработает без проблем. "Плавающий AV " - плата за умность компилятора.
Johnmen (2008-04-15 20:35:00) [23]
> Семеныч (15.04.08 19:25) [2]
> По умолчанию S - это длинная строка. То есть, указатель
> на адрес ее тела (причем тело это заканчивается символом
> #0).
Не надо фантазий :)
Palladin (2008-04-15 20:34:00) [24]
> tesseract © (15.04.08 20:33) [9]
я так и предполагал const или var, очень даже должно, вместо нарыва на AV при s[1], мы хитро на уровне compiler magic приводим string к pchar и спокойно разименовываем
tesseract (2008-04-15 20:33:00) [25]
> это очень хитрый код... у меня доступа нет по http куда
> нибудь кроме delphimaster'a, но могу предположить, что объявление
> выглядит так
function MD5Buffer(const Buffer; Size: Integer): TMD5Digest;
т.е разименование тут роли сыграть не должно :-).
tesseract (2008-04-15 20:30:00) [26]
> код как-раз прекрасно работает:
Это поймёт тебя компилятор или нет. Delphi иногда такое прощает.
Palladin (2008-04-15 20:29:00) [27]
> Anatoly Podgoretsky © (15.04.08 20:21) [5]
это очень хитрый код... у меня доступа нет по http куда нибудь кроме delphimaster'a, но могу предположить, что объявление выглядит так
MD5Buffer(Var p; ...);
Vitec (2008-04-15 20:27:00) [28]код как-раз прекрасно работает:
http://www.delphiworld.narod.ru/base/md5.html
в нем и разбираюсь.
Anatoly Podgoretsky (2008-04-15 20:21:00) [29]> Vitec (15.04.2008 20:09:04) [4]
Это какой то бессмысленный код, вот если убрать каре, то будет рабочим.
Vitec (2008-04-15 20:09:00) [30]Palladin,
угу, надо почитать, с указателями не подружился еще, без них обходился
Семеныч,
спасибо за разъяснения
Anatoly Podgoretsky
Пытаюсь разобраться в md5
function MD5String(const S: string): TMD5Digest;
begin
Result := MD5Buffer(PChar(S)^, Length(S));
end;
нужно для функции MD5Buffer, которая используется для обработки данных разных типов
Anatoly Podgoretsky (2008-04-15 19:53:00) [31]> Vitec (15.04.2008 19:18:00) [0]
А зачем такие глупости делать, для работы со строками нет нужды приводить к PChar и далее делать разименование.
Семеныч (2008-04-15 19:25:00) [32]По умолчанию S - это длинная строка. То есть, указатель на адрес ее тела (причем тело это заканчивается символом #0).
Тип PChar - это указатель на символ.
Значит, PChar(S) - это адрес первого символа строки S.
А PChar(S)^ - это сам первый символ строки (или символ #0, если строка пустая).
Palladin (2008-04-15 19:22:00) [33]разименование указателя, бежим изучать основы паскаля...