2013-06-19 16 views
5

Jak zrobić wskaźnik do pierwszego elementu w tablicy w kolorze czerwonym/systemie?Wskaźniki do tablicy w kolorze czerwonym/systemie

Przypisywanie adresu do wskaźnika nie jest problemem:

my-integer: 1 
ptr: declare pointer! [integer!] 
ptr: :my-integer 

Tablica jest deklarowana.

buffer: as int-ptr! allocate 1009 * size? integer! 

ale.

ptr: :buffer 

nie jest sposobem, ani nie jest.

ptr: ::buffer 
ptr: :buffer/1 
ptr: :(buffer/1) 

Ktoś wie, jak to zrobić?

Pozdrawiam,

Arnolda

+0

Uwaga: ':' NIE jest operatorem * get "*. To wcale nie jest operator. W związku z tym nie można łączyć dwukropków, aby uzyskać get-of-a-get (':: buffer'), ani nie można umieścić spacji (': buffer'). To wiąże się z tym, dlaczego Rebol i Red są tak bardzo różni od innych języków. Prowadzący ":" jest sygnałem, który oznacza, że ​​symbol, który dekorujesz, jest "aromatyzowany" jako GET-WORD !. Pomimo dostępności tych "smaków" (więcej niż Lisp ma, zdecydowanie) to wciąż coś, co zostaje przetworzone symbolicznie. Rebol/Red przetwarza je w sposób, który jest wystrojony jak "normalny" język, ale twoje własne dialekty mogą zrobić inaczej! – HostileFork

Odpowiedz

5

Ponieważ zarówno ptr i buforowe są wskaźnikami do Integer dane, wystarczy przypisać jeden do drugiego:

ptr: buffer 

Składnia :variable jest tylko wymagane, aby uzyskać adres tego, co w języku Java nazywa się typami "pierwotnymi". To odpowiada bajtowi !, integer !, float !, float32! i logika! w aktualnej wersji Red/System. Bez wiodącego : kompilator poda wartość zapisaną w zmiennej.

Wszystkie inne typy, takie jak c-string! i struct! (a więc i alias!) są w rzeczywistości wskaźnikami. Tak więc kompilator podaje ich wartość, gdy są przywoływane, czyli adres pamięci.

Kiedy można odwołać słowo, kompilator Red/system zapewnia wartość przechowywaną w nim:

print i    ;; will print the value stored in i 

Podczas korzystania z set-słowo (zmienna z : dołączonym do nazwy), kompilator przechowuje wartość w nim:

i: 1    ;; stores 1 in variable i 

Podczas korzystania z get-word (zmienna z : włożonej na początku nazwy), kompilator dostarcza adres zmiennej.

int-ptr: :i   ;; stores the address of i in int-ptr