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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2025, 07:03   #1
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 133
По умолчанию Размер динамического массива

Код:

Var DynamicArray: Array of Byte; //Объявлен динамический массив


Procedure AAA ( Var A: Array of Byte );
 Begin
  SetLength ( A, 10 ) // Установка новой длины массива
End;


Procedure TForm1.Button1Click(Sender: TObject);
 Begin
  AAA ( DynamicArray ); // Вызов процедуры
  ShowMessage ( 'Длина массива: ' + IntToStr ( Length ( DynamicArray ) ) ) // Результат: Длина массива: 10
End;
На строке SetLength ошибка : Incompatible types

что я делаю не так?
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 27.07.2025, 08:45   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,432
По умолчанию

Когда "array of" синтаксис используется в аргументах процедуры, то этот аргумент будет иметь тип открытый массив, а не динамический. А изменять размер открытого массива нельзя. Например, можно задать свой тип:
Код:
type
  TByteArray = Array of Byte;

var
  DynamicArray: TByteArray;

Procedure AAA(var A: TByteArray);
Begin
  SetLength(A, 10);
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
  AAA(DynamicArray);
  ShowMessage('Длина массива: ' + IntToStr(Length(DynamicArray)));
End;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 27.07.2025, 09:01   #3
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 133
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Когда "array of" синтаксис используется в аргументах процедуры, то этот аргумент будет иметь тип открытый массив, а не динамический. А изменять размер открытого массива нельзя. Например, можно задать свой тип:
Код:
type
  TByteArray = Array of Byte;

var
  DynamicArray: TByteArray;

Procedure AAA(var A: TByteArray);
Begin
  SetLength(A, 10);
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
  AAA(DynamicArray);
  ShowMessage('Длина массива: ' + IntToStr(Length(DynamicArray)));
End;
Отлично! То что нужно! Буду знать!
Спасибо вам!!!
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уменьшить размер динамического массива несколько раз novuiPolzovatel Общие вопросы C/C++ 3 03.06.2018 00:40
Помогите решить проблему: Найти из заданного пользователём массива самое большое число (размер массива вводит пользователь) Kokosaki Паскаль, Turbo Pascal, PascalABC.NET 16 29.12.2015 21:21
Очистка динамического массива kineziz Общие вопросы C/C++ 1 13.05.2012 02:17
Размер динамического массива не через Length Sibedir Общие вопросы Delphi 10 29.08.2009 21:26
Напомните как задать размер динамического массива Arassir Помощь студентам 4 08.03.2009 13:02