Вверх ↑
Ответов: 4628
Рейтинг: 749
#1: 2015-09-25 10:49:23 ЛС | профиль | цитата
flint2 писал(а):
вообще, никаких действий не происходит

flint2, при присвоении String := PChar - происходит.



PChar - не string. PChar - это указатель на блок памяти, который должен быть ограничен 0-вым байтом. А String кроме подобного блока символов содержит ещё и служебные данные. Именно поэтому происходит копирование (создание новой string) при присвоении String := PChar. А поскольку у String тоже есть "блок памяти, ограниченный 0-вым байтом", то получение PChar из string не приводит ни к каким последствиям для string.

[offtop]Оговорка по поводу @S[1]. Хотя @S[1] можно передавать в функции, которым нужен PChar, но, как я понял, Delphi перестраховывается в этом случае и делает копию строки S (на случай изменения символов в вызываемой функции)[/offtop]
карма: 26

0