![]()  | 
	
 
  | 
| 
		 
			 
			#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! 
		
	
		
		
		
		
		
	
		
		
	
	
	 |