Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.11.2011, 13:14
Змей Змей вне форума
Прохожий
 
Регистрация: 03.11.2011
Сообщения: 18
Репутация: 10
По умолчанию Не работает массив в созданной процедуре

При использовании массива созданного в процедуре у него не сохраняются значения,вот в таком виде нули выдает:
Код:
var
  Form1: TForm1;
  d: array[0..10] of integer;
  i:integer;
  procedure x(d: array of integer);


procedure TForm1.Button1Click(Sender: TObject);
begin
x(d);
for i:=0 to 10 do
memo1.Lines.Add(inttostr(d[i]));
end;

procedure x(d: array of integer);
begin
for i:=0 to 10 do
begin
d[i]:=i;
//form1.memo1.Lines.Add(inttostr(d[i]));
end;
end;

А если выводить прямо из процедуры в мемо то все нормально работает.
Наверное в записи что то поменять нужно, подскажите что.
Ответить с цитированием
  #2  
Старый 25.11.2011, 13:25
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

procedure x(var d: array of integer);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 25.11.2011, 13:47
Змей Змей вне форума
Прохожий
 
Регистрация: 03.11.2011
Сообщения: 18
Репутация: 10
По умолчанию

Благодарю, проглядел
Ответить с цитированием
  #4  
Старый 25.11.2011, 13:51
Змей Змей вне форума
Прохожий
 
Регистрация: 03.11.2011
Сообщения: 18
Репутация: 10
По умолчанию

Но вот здесь про var немного другое написано
http://www.delphi-manual.ru/lesson9.php
Цитата:
Есть особенности в использовании в качестве параметров больших по объёму структур данных, например, массивов, состоящих из нескольких тысяч (и больше) элементов. При передаче в подпрограмму данных большого объёма могут быть большие расходы ресурсов и времени системы. Поэтому используется передача не самих значений элементов (передача "по значению", как в предыдущих примерах), а ссылки на имя переменной или константы (передача "по имени"). Достигается это вставкой перед теми параметрами, которые мы хотим передать по имени, ключевого слова var.
Ошибка получается?
Ответить с цитированием
  #5  
Старый 25.11.2011, 14:21
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

если без var, то делается копия переменной, соответственно что ты меняешь в процедуре делается в копии и на оригинал не влияет
Ответить с цитированием
  #6  
Старый 25.11.2011, 21:39
Змей Змей вне форума
Прохожий
 
Регистрация: 03.11.2011
Сообщения: 18
Репутация: 10
По умолчанию

Поразбирался еще и возникает вопрос,а зачем вообще что то в скобках в процедуре писать, если и так ссылки на глобальные переменные будут? А локальные переменные все равно ниже задаются. В чем сакральный смысл переменных в скобках?
Ответить с цитированием
  #7  
Старый 25.11.2011, 21:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

При использовании в одном юните смысла мало. Теперь представь, что процедура в другом юните или, что "приятнее", в DLL. Что тогда? Как передавать будешь?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 25.11.2011, 21:45
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А если так:
Код:
procedure a(b:integer);
begin
...
end;

procedure c;
var k:integer;
begin
...
 a(k);
end;
Как тогда делать без параметров? Вдобавок, частенько нужна именно копия переменной, чтоб не попортить саму переменную.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 25.11.2011, 21:57
Змей Змей вне форума
Прохожий
 
Регистрация: 03.11.2011
Сообщения: 18
Репутация: 10
По умолчанию

Понял,спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025