Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Вниз

Копируется ли элемент массива запись при присвоении?   Найти похожие ветки 

 
TStas   (2010-08-16 21:10) [0]

Допустим есть Type TSomeRec = record ...end; //Какая-то запись
Var Ar: Array[1..10] of TSomeRec;
DynAr: Array of TSomeRec;
X: TSomeRec;

Если я пишу X := Ar[2], есть ли копирование или это только ссылка?
А если X := DynAr[2]?

Вообще, я если определяю тип запись, всегда к ней сразу пишу процедуру копирования и копирую процедурой. Точно знаю, что если у записи есть поля длинные строки (String), то при простом присвоении копия строки не создаётся.
Подскажите, а то заметил, что здесь у меня пробел в знаниях.


 
Сергей М. ©   (2010-08-16 21:27) [1]


> пишу X := Ar[2], есть ли копирование


Есть.


> А если X := DynAr[2]?


Есть.

> если у записи есть поля длинные строки (String), то при
> простом присвоении копия строки не создаётся


Не создается. Да она и не нужна при "простом присвоении".


 
TStas   (2010-08-16 22:21) [2]

То есть, если мне нужно прочитать какое-то поле записи, то лучше делать не X.SomeField, a Ar[2].SomeField?


 
Сергей М. ©   (2010-08-16 22:23) [3]

Какая разница что читать - оригинал или копию ?


 
Германн ©   (2010-08-16 23:01) [4]


> То есть, если мне нужно прочитать какое-то поле записи,
> то лучше делать не X.SomeField, a Ar[2].SomeField?
>

Если речь о поле типа String, то и так и так читается одно и тоже. Т.е. в случае копии нет.


 
Сергей М. ©   (2010-08-16 23:06) [5]


> Германн ©   (16.08.10 23:01) [4]


Ну копия-то, положим, есть. Только не копия самих данных, а копия указателя на них.


 
Palladin ©   (2010-08-17 05:04) [6]


> Если я пишу X := Ar[2], есть ли копирование или это только
> ссылка?

проверить слабо?

type
  TMyType = record
    s: String;
  end;
var
  ar: Array [1..1] of TMyType;
  bezDarnostj: Array of TMyType;
  r: TMyType;
begin
  ar[1].s := "Нехорошее слово";
  r := ar[1];
  r.s := "Вообще плохое слово";
  ShowMessage(#39 + r.s + #39":"#39 + ar[1].s + #39);
  SetLength(bezDarnostj, 3);
  bezDarnostj[2].s := "Бездарность";
  r := bezDarnostj[2];
  r.s := "Дарность не детектед";
  ShowMessage(#39 + r.s + #39":"#39 + bezDarnostj[2].s + #39);
end;


сложно конечно написать... пусть всякие паладины пишут... а мы на форуме спросим... мы-ж не чернорабочие...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.023 c
2-1282575219
mfender
2010-08-23 18:53
2010.11.14
Узнать, есть ли свойство у контрола?


15-1280820131
Дмитрий С
2010-08-03 11:22
2010.11.14
К вопросу о хранении содержимого файлов в базе.


8-1180596214
Yert
2007-05-31 11:23
2010.11.14
Перекрытие SNDPlaySound


15-1280996881
abun
2010-08-05 12:28
2010.11.14
Как программно отследить события


15-1280608559
Юрий
2010-08-01 00:35
2010.11.14
С днем рождения ! 1 августа 2010 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский