Указатели
 
Типы данных, значения которых являются адресами в памяти.

Декларация

Указатели — это переменные, значения которых являются адресами в памяти. Тип данных, на которые указывает указатель зависит от типа указателя (Integer Pointer указывает на данные с типом Integer). Указатели объявляются так же , как и любая другая переменная, но с дополнительным суффиксом "pointer" или "ptr" после имени типа.

Доступ к данным по указателю

Данные, на который указывает указатель можно получить с помощью оператора * (значение из). Этот оператор возвращает ссылку на данные, на которые указывает его операнд. В следующем примере,

Dim myInteger As Integer = 10
Dim myPointer As Integer Pointer = @myInteger
*myPointer = 20
Print myInteger

объявляется переменная с типом Integer и именем myInteger , а так же указатель Integer pointer с именем myPointer , который будет указывать на данные переменной myInteger . Operator @ (Адрес из) используется, чтобы получить адрес myInteger. Значение 20 присваивается месту в памяти, адрес которого указывает myPointer , а ему в свою очередь присвоен  адрес myInteger, или @myInteger. Изменения *myPointer непосредственно влияет на значение myInteger (выражение "*myPointer" это то же самое, что и "myInteger").

Указатели для определяемых пользователем типов

Указатели на определяемые пользователем типы определяются и используются как и все другие указатели. Доступ к элементу Type или Class осуществляется с помощью двух методов:

Type myType
    a As Integer
    b As Double
End Type

Dim x As myType
Dim p As myType Pointer = @x

'' 1) разыменование указателя и использование оператора доступа к элементу:
(*p).a = 10
(*p).b = 12.34

'' 2) использовать сокращенную форму оператора доступа к элементу:
Print p->a
Print p->b

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

Второй оператор использует оператор -> (доступ к элементу из указателя). Этот оператор получает доступ к элементу из указателя, которые автоматически разыменовываются. Это может сделать код немного понятнее, хотя обе формы выдают одинаковый результат.

См. также