Как и PTR и буферные указатели на целочисленные данные, нужно просто присвоить один к другому:
ptr: buffer
Синтаксис :variable
только требуется, чтобы получить адрес того, что в Java было бы названо «примитивными» типами. Это эквивалентно байту !, целому!!, Float !, float32! и логика! в текущей версии Red/System. Без ведущего :
компилятор предоставит значение, сохраненное в переменной.
Все другие типы, такие как c-string! и структура! (и, следовательно, псевдоним!) на самом деле являются указателями. Таким образом, компилятор предоставляет свое значение, когда они ссылаются, что является адресом памяти.
Когда вы ссылаетесь на слово, Красный/System компилятор обеспечивает значение, хранящееся в нем:
print i ;; will print the value stored in i
При использовании набора-слово (переменная с :
приложенном к имени), то компилятор сохраняет значение в нем:
i: 1 ;; stores 1 in variable i
при использовании GET-слово (переменная с :
вставленной в начале имени), компилятор предоставляет адрес переменной.
int-ptr: :i ;; stores the address of i in int-ptr
Обратите внимание, что ':' НЕ является оператором * get '*. Это не оператор. Следовательно, вы не можете комбинировать двоеточия для достижения get-of-a-get (':: buffer'), и вы не можете поместить пробел (': buffer'). Это связано с тем, почему Rebol и Red настолько отличаются от других языков. Ведущий «:» - это сигнал, который означает, что символ, который вы украшаете, «приправлен» как GET-WORD !. Несмотря на наличие этих «ароматов» (более того, Lisp, безусловно), это все еще только что-то, что обрабатывается символически. Rebol/Red обрабатывают их таким образом, который нарядился как «нормальный» язык, но ваши собственные диалекты могут сделать иначе! – HostileFork