Указатели на "массив" в красном /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
Другие вопросы по тегам