|
#1
|
||||
|
||||
Указатели
Вот читал "Библию Делфи" Флёного... Там есть глава об указателях (стр.240).
Цитата:
-------------------------------------------- 1) Код:
var s: sttring; p: pointer; p := @s; myProc(string(p^)); procedure myProc(value: string); begin showMessage(value); end; -------------------------------------------- 2) Код:
var s: sttring; p: pointer; p := @s; myProc(p); procedure myProc(value: pointer); begin showMessage(string(value^)); end; -------------------------------------------- Спасибо заранее! Последний раз редактировалось atomAltera, 13.03.2008 в 14:24. |
#2
|
|||
|
|||
Первый вариант - та самая передача строки от которой ты так стремишся избавиться.
Второй - передача адреса строки. Можно делать это без введения дополнительной переменной: Код:
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 является указателем и компилятор (по-моему мнению) может быть достаточно разумным и разделить два варианта передачи - по ссылке и по значению передавая при этом всегда только указатель. |
#3
|
||||
|
||||
Спасибо AlexBlack!
|