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

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

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

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

Купить рекламу на форуме 85 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2022, 10:53   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию Принцип TStrings и как работает вставка/перемещение

Вопрос такой вот: если я меняю местами две строки - то в памяти происходит перемещение двух строк, или просто меняются местами значения ссылок, а сами строки никуда не перемещаются?

Тот же вопрос касательно того, когда в середину TStrings вставляется новая строка: данные строк, которые после перемещаются, или двигаются только ссылки?
Kronos913 вне форума Ответить с цитированием
Старый 13.10.2022, 19:33   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,388
По умолчанию

Это легко выяснить. Попробуйте получить указатель на первый символ строки (привести ее к PChar), а дальше сравните значения указателей до и после.
macomics вне форума Ответить с цитированием
Старый 14.10.2022, 12:12   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Просто вопрос, как лучше делать большую перетасовку строк: делать временный стринглист, заполнить его в нужном порядке и потом присвоить его строки исходному мемо, или прямо в мемо все перемещать?
Kronos913 вне форума Ответить с цитированием
Старый 14.10.2022, 14:12   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,388
По умолчанию

Сразу в Memo
macomics вне форума Ответить с цитированием
Старый 14.10.2022, 16:24   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Чтобы не создавать новую тему: а как получить ссылку на строку из TStrings

То есть, чтобы обращаться к какой-то конкретной строке из листа по ссылке как обычной строке
Kronos913 вне форума Ответить с цитированием
Старый 14.10.2022, 16:41   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,388
По умолчанию

Код:
a: TStrings;
a[i]
macomics вне форума Ответить с цитированием
Старый 14.10.2022, 19:17   #7
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Я имею в виду
Код:
a:TStrings
s:^string
Код:
s:=@a[0]
Выдаёт ошибку
Kronos913 вне форума Ответить с цитированием
Старый 14.10.2022, 19:24   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,388
По умолчанию

А PChar вам на что? Просто работа с объектами string уже предполагает работу со ссылками на нее. Копирования происходят только в случаях попыток изменения строки (операции + или явный вызов copy или delete).
macomics вне форума Ответить с цитированием
Старый 15.10.2022, 01:19   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,811
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Я имею в виду
Код:

a:TStrings
s:^string
Забудьте раз и навсегда такую работу со строками и динамическими массивами. Это давно уже совсем особые структуры со своей личной жизнью.
northener на форуме Ответить с цитированием
Старый 17.10.2022, 12:46   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Если вам интересно разобраться как работают строки, то вот рекомендую к чтению:
1 https://www.transl-gunsmoker.ru/2009/09/pchars.html
2 https://www.gunsmoker.ru/2018/02/pchars.html
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 85 тыс рублей в месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опишите пожалуйста принцип кода и как он работает Supeeg Общие вопросы C/C++ 1 26.01.2021 02:51
Копирование, перемещение и вставка файлов Артём14 Lazarus, Free Pascal, CodeTyphon 1 23.02.2017 22:03
[Си]: Вставка столбца в двумерный массив. Не работает код. moksim Помощь студентам 2 14.12.2016 20:15
Не так работает в 2007 копирование-вставка? gregory1b Microsoft Office Excel 2 20.03.2011 16:57