Оператор @ (Адрес из)
 
Возвращает адрес строкового литерала, переменной, объекта или процедуры

Синтаксис

Declare Operator @ ( ByRef rhs As T ) As T Pointer

Использование

result = @ rhs

Параметры

rhs
Строковый литерал, переменная, объект или процедура для получения адреса.
T
Любой Стандартный, определяемый пользователем или процедурный тип.

Возвращаемое значение

Возвращает адрес операнда (rhs).

Описание

Оператор @ (Адрес из) возвращает адрес памяти своего операнда.

Когда операнд имеет тип String, возвращается адрес внутреннего дескриптора строки. Используйте Оператор Strptr (Строковой указатель) для получения адреса данных строки.

Операнд не может быть массивом, но может быть элементом массива. Например, "@myarray(0)" возвращает адрес "myarray(0)".

Этот оператор может быть перегружен для пользовательских типов.

Пример

'Эта программа демонстрирует использование оператора @.

Dim a As Integer
Dim b As Integer

Dim addr As Integer Ptr

a = 5   'Здесь мы размещаем значения 5 и 10 в А и В, соответственно.
b = 10

'Здесь мы выводим значения переменных, и тот адрес где в памяти они хранятся.
Print "The value in A is ";a;" but the pointer to a is ";@a
Print "The value in B is ";b;" but the pointer to b is ";@b

'Теперь, мы будем использовать переменную с типом INTEGER PTR , описанную выше, и использовать оператор @ , чтобы разместить значение в нее.
'Обратите внимание, что * будет проверять значение в ptr, так же, как @ проверяет ptr 
'для обычной переменной.

addr = @a

Print "The pointer addr is now pointing at the memory address to a, value: ";*addr

addr = @b

Print "The pointer addr is now pointing at the memory address to b, value: ";*addr


'Эта программа демонстрирует, как можно использовать оператор @
'для создания указателя на процедуру.

Declare Sub mySubroutine ()

Dim say_Hello As Sub() 

say_Hello = @mySubroutine   'Мы присваиваем say_Hello адрес mySubroutine.
                            'Тип данных sub() действует как указатель здесь.

say_Hello() 'Теперь мы можем запустить say_Hello так же как и mySubroutine.

Sub mySubroutine
    Print "hi"
End Sub


Различия диалектов

  • В диалекте -lang qb, этот оператор не может быть перегружен.

Отличия от QB

  • Новое в FreeBASIC

См. также