Главная страница
    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.004 c
15-1280779554
Petr V. Abramov
2010-08-03 00:05
2010.11.14
кто какими погодными сайтами пользуется?


3-1247748056
_REA
2009-07-16 16:40
2010.11.14
Выборка Master и Detail


2-1282026336
Роман
2010-08-17 10:25
2010.11.14
Выборка одного и того же поля с разными условиями


2-1282109949
03111978
2010-08-18 09:39
2010.11.14
Вертикальное расположение заголовков


15-1280494350
12
2010-07-30 16:52
2010.11.14
Давайте про астрономию поговорим-пофантазируем?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский