2013-06-19 5 views
5

Как создать указатель на первый элемент в массиве в Red/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) 

Кто-нибудь знает, как это сделать?

С уважением,

Арнольд

+0

Обратите внимание, что ':' НЕ является оператором * get '*. Это не оператор. Следовательно, вы не можете комбинировать двоеточия для достижения get-of-a-get (':: buffer'), и вы не можете поместить пробел (': buffer'). Это связано с тем, почему Rebol и Red настолько отличаются от других языков. Ведущий «:» - это сигнал, который означает, что символ, который вы украшаете, «приправлен» как GET-WORD !. Несмотря на наличие этих «ароматов» (более того, Lisp, безусловно), это все еще только что-то, что обрабатывается символически. Rebol/Red обрабатывают их таким образом, который нарядился как «нормальный» язык, но ваши собственные диалекты могут сделать иначе! – HostileFork

ответ

5

Как и 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 

 Смежные вопросы

  • Нет связанных вопросов^_^