Главная страница
    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-1280688344
Медвежонок Пятачок
2010-08-01 22:45
2010.11.14
Вон оно чо, михалыч!


2-1281828999
Гость
2010-08-15 03:36
2010.11.14
В каком параметре записана ширина стрелочки у TComboBox?


2-1282080138
подмастерье
2010-08-18 01:22
2010.11.14
Изменение свойств формы


2-1281521447
unknow
2010-08-11 14:10
2010.11.14
Как избежать повторного ввода данных в базу?


6-1220980433
dmitry_12_08_73
2008-09-09 21:13
2010.11.14
Шаринг изображений с использованием сервисов SCP/SFTP, HTTP...





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