Массивы и строки отличаются поведением при присваивании переменных. В случае строк, после присваивания и изменения значения в одной из переменных, создаётся новая строка. Примерно так же работают статические массивы (мне не удалось найти описание в документации). В отличии от них, динамические массивы просто присваиваются по ссылке.
Следующий участок кода демонстрирует различия в поведении:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
function ArrayToStr(const AArray: array of Integer): string; var i: Integer; begin Result := ''; for i in AArray do Result := Result + IntToStr(i); end; procedure TForm1.Button1Click(Sender: TObject); var str1, str2: string; array_static1, array_static2: array[0..2] of Integer; array1, array2: array of Integer; begin Memo1.Clear; Memo2.Clear; Memo3.Clear; // string str1 := '123'; str2 := str1; str2[1] := '5'; Memo1.Lines.Add(str1); // 123 Memo1.Lines.Add(str2); // 532 // array[0..2] of Integer array_static1[0] := 1; array_static1[1] := 2; array_static1[2] := 3; array_static2 := array_static1; array_static2[0] := 5; Memo2.Lines.Add(ArrayToStr(array_static1)); // 123 Memo2.Lines.Add(ArrayToStr(array_static2)); // 532 // array of Integer SetLength(array1, 3); array1[0] := 1; array1[1] := 2; array1[2] := 3; array2 := array1; array2[0] := 5; Memo3.Lines.Add(ArrayToStr(array1)); // 532 Memo3.Lines.Add(ArrayToStr(array2)); // 532 end; |
Детальное объяснение поведения строк в статье на DelphiKingdom пункт 2.16. Представление строк в памяти.
Delphi жив? Интересно где и что на нём пишут (знаю что это Pascal)?
Последний раз запускал в году этак 2003, Delphi 7, помню по синей заставке 🙂
Ещё Visual Basic от Майков. Эх, были времена…
Пишут на Delphi то, для чего он подходит больше всего — крупные корпоративные системы со сложным пользовательским интерфейсом.
На Delphi пишут все, и крупные корпоративные системы, и мелкие приложения (аля калькулятор), и сервисы, и сайты, и драйверы, и даже компиляторы.
Попросту свежее поколение программистов больше похоже на жертв маркетинга. Рынок разработки в жопе полной, простые задачи IT фирмы выполнить не могут, т.к. ни дельфями ни си++ не умеют пользоваться. Хотя разработка на Delphi это не сложно вообще. Я человек когда-то далекий от программирования на 100% первый проект сделал за 2 недели. Первую неделю читал справку.
VB тоже никуда не делся. Очень удобен для макросов широчайшего спектра ПО (не только офис)