Указатели на "массив" в красном /System
Как мне сделать указатель на первый элемент в массиве в Red/System?
Присвоение адреса указателю не проблема:
my-integer: 1
ptr: declare pointer! [integer!]
ptr: :my-integer
Массив объявлен.
buffer: as int-ptr! allocate 1009 * size? integer!
но.
ptr: :buffer
это не путь и не так.
ptr: ::buffer
ptr: :buffer/1
ptr: :(buffer/1)
Кто-нибудь знает, как это сделать?
С Уважением,
Арнольд
1 ответ
Поскольку и ptr, и buffer являются указателями на целочисленные данные, вы просто назначаете одно другому:
ptr: buffer
:variable
синтаксис требуется только для получения адреса того, что в Java называют "примитивными" типами. Это приравнивается к байту!, целому числу, числу с плавающей точкой! и логика! в текущей версии Red/System. Без ведущих :
компилятор предоставит значение, хранящееся в переменной.
Все остальные типы, такие как c-string! и структурировать! (и, следовательно, псевдоним!) на самом деле указатели. Таким образом, компилятор предоставляет их значение при обращении к ним, которое является адресом памяти.
Когда вы ссылаетесь на слово, компилятор Red / System предоставляет сохраненное в нем значение:
print i ;; will print the value stored in i
Когда вы используете set-word (переменная с :
добавляется к имени), компилятор сохраняет в нем значение:
i: 1 ;; stores 1 in variable i
Когда вы используете get-word (переменная с :
вставляется в начале имени), компилятор предоставляет адрес переменной.
int-ptr: :i ;; stores the address of i in int-ptr