2013-06-19 11 views
5

Come si crea un puntatore al primo elemento di un array in Rosso/Sistema?Puntatori a un 'array' in Rosso/Sistema

Assegnazione di un indirizzo a un puntatore non è un problema:

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

La matrice viene dichiarato.

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

ma.

ptr: :buffer 

non è il modo, né è.

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

Qualcuno sa come fare?

saluti,

Arnold

+0

Nota che ':' NON è un * get "operatore" *. Non è affatto un operatore. Quindi non è possibile combinare i due punti per ottenere un get-of-get (':: buffer') né si può inserire uno spazio (': buffer'). Questo è legato al motivo per cui Rebol e Red sono molto diversi dalle altre lingue. Un indicatore ":" è un segnale che indica che il simbolo che stai decorando è "aromatizzato" come GET-WORD !. Nonostante la disponibilità di questi "sapori" (più di Lisp ha, di gran lunga) è ancora solo qualcosa che viene elaborato simbolicamente. Rebol/Red li processa in un modo che è vestito come una "normale" lingua, ma i tuoi dialetti possono fare altrimenti! – HostileFork

risposta

5

quanto sia PTR e tampone sono puntatori a intero i dati, è sufficiente assegnare uno all'altro:

ptr: buffer 

La sintassi :variable è necessaria solo per ottenere il indirizzo di quelli che si chiamerebbero tipi "primitivi" in Java. Ciò equivale a byte !, intero !, float !, float32! e logica! nella versione corrente di Red/System. Senza il numero iniziale :, il compilatore fornirà il valore memorizzato nella variabile.

Tutti gli altri tipi come c-string! e struct! (e quindi alias!) sono in realtà indicatori. Quindi il compilatore fornisce il loro valore quando vengono referenziati, che è un indirizzo di memoria.

Quando si fa riferimento una parola, il compilatore Rosso/System fornisce il valore memorizzato in esso:

print i    ;; will print the value stored in i 

Quando si utilizza un set di parole (una variabile con un : aggiunto al nome), il compilatore memorizza un valore in esso:

i: 1    ;; stores 1 in variable i 

Quando si utilizza un get-parola (una variabile con una : inserita all'inizio del nome), il compilatore fornisce l'indirizzo della variabile.

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