PDA

Просмотр полной версии : Адресация элементов массива через ссылки REFERENCE TO Возможно ли такое?



RomeoVar
13.06.2021, 13:34
Имеется некий массив
stServoDrivePrms: ARRAY[0..1] OF DRIVE_PARAMS;

через указатель доступ к элементу массива через SIZEOF(DRIVE_PARAMS)*i // i - индекс массива

А если я хочу через ссылку
refstServoDrivePrms: REFERENCE TO DRIVE_PARAMS;
refstServoDrivePrms REF= stServoDrivePrms[0];
можно ли получить ссылку к следующему элементу массива и как это сделать? В документации об этом вообще ни слова. Я так понимаю механизм не реализован?

Заранее признателен

capzap
13.06.2021, 16:30
В документации как раз есть как нельзя объявлять, может это уже раз тот случай55544

RomeoVar
13.06.2021, 17:03
Это я прочитал и так не объявлял. Мне в принципе хотелось бы понять что такое REFERENCE. С указателем все понятно - физический адрес в памяти где хранится переменная (с неким базовым типом) на которую "смотрит" указатель. Соответственно зная структуру переменной, при помощи SIZEOF(BASETYPE) можно задавать смещение, и если это массив, обращаться к его элементам.
А ссылка что за зверь? В отладчике я ничего не вижу - пусто.
(Скрин во вложении)
В документации написано - типа гибко, лучше указателей, а по факту - ВОТ! Я хрен пойму как с ними и работать?
Видимо прийдется возвращаться к старым-добрым указателям

Зинько Владислав
14.06.2021, 08:14
А ссылка что за зверь?
Добрый день.

Ссылка - строго типизированный указатель. Компилятор проверяет соответствие типов при использовании ссылок, при работе с указателями - нет. Т.е. в REFERENCE TO REAL можно отдать переменную только типа REAL.


В отладчике я ничего не вижу - пусто.
На скрине видно, что у Вас ссылка на структуру. Нажмите на "+" и увидите значения, если они туда пришли.

RomeoVar
14.06.2021, 08:41
Вот еще раз проверяю. Смотрите скрин
stDrivePrms; POINTER TO DRIVE_PARAMS;
refstDrivePrms; REFERENCE TO DRIVE_PARAMS;

Переменная-указатель содержит адрес, а разыменованная переменная-указатель содержит значения хранящиеся в памяти, выделенной для этого типа переменной. Поэтому я даже не раскрывая структуру вижу значение области памяти

Переменная-ссылка не содержит ничего, там пусто.
Почему так?
А значения мне не нужны, вопрос по-моему понятен Адресация элементов массива через ссылки REFERENCE TO Возможно ли такое?

Зинько Владислав
14.06.2021, 08:53
А значения мне не нужны, вопрос по-моему понятен Адресация элементов массива через ссылки REFERENCE TO Возможно ли такое?

Если мы говорим о том, чтобы через полученную ссылку получить значение следующего элемента в массиве, то нет.
По ссылке действительно нет явного адреса памяти для его обработки.

RomeoVar
14.06.2021, 09:18
Тогда всек понятно. Это абсолютно бесполезная приблуда. Из преимуществ - Типовая безопасность на уровне компилятора. Но преимущество весьма сомнительное

RomeoVar
08.07.2021, 06:09
Тему закрыл