Типы данных, значения которых являются адресами в памяти.
Декларация
Указатели — это
переменные, значения
которых являются адресами в памяти. Тип данных, на которые указывает
указатель зависит от типа указателя (
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
Первый метод использует
оператор . (доступ
к элементу). Этот оператор получает доступ к элементу из ссылки,
поэтому указатель разыменовывается в первую очередь. Оператор доступа к
элементу имеет более высокий приоритет по сравнению с оператором ссылки,
поэтому скобки необходимы для разыменовывания прежде, чем использовать его с
оператором доступа к элементу.
Второй оператор использует
оператор -> (доступ к элементу из указателя). Этот оператор
получает доступ к элементу из указателя, которые автоматически
разыменовываются. Это может сделать код немного понятнее, хотя обе формы
выдают одинаковый результат.
См. также