Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2011, 03:46   #1
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию Копирование структур record

Доброй ночи! Появилась проблема которую я не могу решить в силу малого опыта програмирование.

Проблема заключается вот в чем. Не могу найти стандартную функцию или процедуру для копирования елементов структур record. Поскольку я так понял что при обычном присвоении, оно присваевает указатель.
Буду благодарен за быстрый ответ.
Gausse вне форума Ответить с цитированием
Старый 14.06.2011, 04:23   #2
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

Уже нашол решение проблемы. Необходимо поэлементное копирование. В противном случае присваевается указатель.
Gausse вне форума Ответить с цитированием
Старый 14.06.2011, 05:21   #3
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Ну или так
Код:
 a, b: TMyRec;

  FillChar(b, SizeOf(TMyRec), 0);
  Move(a, b, SizeOf(TMyRec));
Баламут вне форума Ответить с цитированием
Старый 14.06.2011, 09:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну или так:
Код:
var a, b: TMyRec;
...
  New(b);
  b^ :=  a^;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2011, 09:41   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

разве структуры как и объекты всегда хранятся по указателю?
или ТС недоговаривает что использует указатели на структуры?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.06.2011 в 09:49.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.06.2011, 10:09   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
или ТС недоговаривает что использует указатели на объекты?
99% что именно так он и делает...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2011, 10:35   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну или так:
Код:
var a, b: TMyRec;
...
  New(b);
  b^ :=  a^;
не понял в чем смысл этого. Ниже простейший код нормально присваивает структуру в структуру по-элементно без всякого намека на указатели структур. Всегда пользуюсь этим
Код:
type Trrr = record
       i1: Integer;
       s1: String;
     end;
var xR1,xR2: Trrr;
...
  xR1.i1:=1;
  xR1.s1:='ff';
  xR2:=xR1;
  xR2.i1:=2;
  if xR1.i1=xR2.i1 then ShowMessage('???');
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.06.2011, 11:01   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Аватар, прочтите следующих два поста(мой и ответ)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.06.2011, 11:02   #9
Gausse
Пользователь
 
Регистрация: 23.01.2011
Сообщений: 14
По умолчанию

нет я не использую укзатели.
Код:
for i := 1 to (length(macro_tabl)-1) do
  if tmp.lex[1].lexem=macro_tabl[i].macro_id then break;
for j := 0 to length(macro_tabl[i].rows)-1 do
  begin
    setlength(temp,j+1);
    for k := 1 to (macro_tabl[i].rows[j].num-1) do
      begin
        setlength(temp[j].lex,k+1);
        temp[j].lex[k]:=macro_tabl[i].rows[j].lex[k];
      end;
      temp[j].num:=macro_tabl[i].rows[j].num;
  end;

writeln(OutputFile,macro_tabl[i].macro_id);
if tmp.num>2 then begin
                    for k := 0 to (length(temp)-1) do
                       for j := 1 to temp[k].num-1 do
                          if temp[k].lex[j].lexem=macro_tabl[i].parametr then temp[k].lex[j]:=tmp.lex[2];
                  end;
если вместо цикла замены, сделать обычное присвоение то при изминении temp изменяется и macro_tabl.
Gausse вне форума Ответить с цитированием
Старый 14.06.2011, 11:13   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

покажите объявление типа структуры

у вас помоему содержится массив в структуре, а там все сложнее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.06.2011 в 11:27.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записи (record) mexx1337 Паскаль, Turbo Pascal, PascalABC.NET 1 12.05.2011 23:43
Record! .K.E.P. Паскаль, Turbo Pascal, PascalABC.NET 1 17.12.2010 21:56
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14
Record / Packed Record Alex Cones Общие вопросы Delphi 7 11.11.2009 10:43
my Record subsonic Общие вопросы Delphi 5 09.02.2009 15:20