Тема: Указатели
Показать сообщение отдельно
  #2  
Старый 13.03.2008, 14:38
AlexBlack AlexBlack вне форума
Прохожий
 
Регистрация: 12.10.2007
Сообщения: 12
Репутация: 10
По умолчанию

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

Второй - передача адреса строки.
Можно делать это без введения дополнительной переменной:

Код:
var s: sttring;
myProc(@s);
procedure myProc(value: pointer);
begin
    showMessage(string(value^));
end;

Конечно, так можно. Но
Этот вариант во-первых вводит нас в заблуждение. В параметрах
описан указатель, а мы работем с ним как со строкой.

Во-вторых. Пераметр становится параметров по ссылке вместо
параметра по значению. Так лучше тогда сразу записать

procedure myProc(var value: String);

Будет передаваться только указатель строки.

Другой вариант использовать PChar.

Надеюсь, не запутал тебя своими рассуждениями и внес хлть какую-то ясность.

И еще мелким шрифтом.
В Delphi String м.б. как ShortString, так и AnsiString
(и wide ...). Так вот ShortString передается как указано в книге. Насчет
AnsiString не уверен. Нужно посмотреть в справке. В принципе, AnsiString является указателем и компилятор (по-моему мнению) может быть достаточно разумным и разделить два варианта передачи - по ссылке и по значению передавая при этом всегда только указатель.
Ответить с цитированием