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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2024, 14:14   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 662
По умолчанию Передача массива по нулевому элементу

Сразу отвечаю на вопрос почему я хочу сделать именно так:
Это добавления куска в уже существующий код, и чтобы поменьше переделывать, так сделать было бы намного удобнее.

Есть массив:
Код:
var
ff:array [0..1] of TStringList;
Есть процедура
Код:
Procedure aaa(ss:TStrings);
Вопрос:
Можно ли вызвать процедуру вот так?
Код:
aaa(ff[0]);
А внутри процедуры для обращения к другому элементу использовать код
Код:
TStringList(LongWord(ss)+4)
Kronos913 вне форума Ответить с цитированием
Старый 12.10.2024, 19:06   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,674
По умолчанию

Мне почему-то кажется, что чем писать вопрос на форуме и ждать ответов, быстрее взять и проверить самому...
Arigato на форуме Ответить с цитированием
Старый 12.10.2024, 20:44   #3
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Можно ли вызвать процедуру вот так?
Код:
aaa(ff[0]);
Да, и это легитимный вариант.

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
А внутри процедуры для обращения к другому элементу использовать код
Код:
TStringList(LongWord(ss)+4)
Технически использовать можно, и даже сработает, но сам подход сомнителен. Уж лучше передавать в процедуру сам массив с модификатором const — будет работать как указатель.
Код:
type
  TwoStringLists = array[0..1] of TStringList;

procedure aaa(const ss: TwoStringLists);
begin
  ss[0].Assign(ss[1]); // например
end;

var
  yy: TwoStringLists;
begin
  yy[0] := StringList1;
  yy[1] := StringList2;
  aaa(yy);
end;
С возвращением! А то я уж думал, совсем пропал, спугнули модеры-флудеры в мое отсутствие.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 12.10.2024, 22:40   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 662
По умолчанию

В качестве плана Б у меня есть один способ
Но если делать так - то придётся всё равно ощутимо править существующий код

Менять меньше, чем если под корень всё менять, но всё равно, менять ощутимо. Потому думаю над тем, есть ли вариант лучше?


Код:
type
  DopelList:array[0..1] of TStringList;
  PDopelList=^DopelList
Передавать аргумент
Код:
TStringList(@ss)
А внутри процедуры
Код:
PDopelList(ss)
Похожая идея у меня уже используется. Для того чтобы в разных случаях в процедуру загонять переменную разного типа
Изображения
Тип файла: png изображение_2024-10-12_214126569.png (52.0 Кб, 20 просмотров)
Kronos913 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к элементу элемента массива строк gorauralskaya Общие вопросы по Java, Java SE, Kotlin 1 04.05.2016 16:01
Обращение к элементу массива Jeckor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.06.2015 21:08
Как обратиться к элементу массива (TASM)) Artur1992 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 26.05.2012 19:17
Не присваивается значение элементу массива LPWSTR Tolias Общие вопросы C/C++ 3 24.06.2011 17:54
Обращение к предыдущему/следующему элементу массива feras Общие вопросы Delphi 1 08.06.2011 21:29