2013-06-19 11 views
5

Red/Systemの配列の最初の要素へのポインタを作成するにはどうすればよいですか?ポインタのアドレスを割り当てるRed/Systemの 'array'へのポインタ

は問題ありません:

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

':'は* a * get "演算子"ではないことに注意してください。それはまったく演算子ではありません。したがって、コロンを組み合わせてget-of-a-get( ':: buffer')やスペース(':buffer')を入れることはできません。これは、なぜRebolとRedが他の言語と非常に違うのかと結びついています。先頭の ':'は、あなたが飾っているシンボルがGET-WORDとして「風味付け」されていることを意味するシグナルです。これらの "フレーバー"が利用できるにもかかわらず(これまでのところ、Lisp以上に)、それはまだ記号的に処理されたものです。 Rebol/Redは「通常の」言語のように身に着けられた方法でそれらを処理しますが、あなた自身の方言は別の方法で行うことができます! – HostileFork

答えて

5

ptrが、バッファの両方として、あなたは、単に他の1つを割り当てて、データを整数へのポインタです::variable構文のみを取得するために必要とされる

ptr: buffer 

Javaの「プリミティブ」型と呼ばれるもののアドレス。これはbyte!、integer!、float!、float32!と同じです!そして論理! Red/Systemの現在のバージョンでは、先頭に:がなければ、コンパイラは変数に格納されている値を提供します。

他のすべてのタイプ、たとえばc-string!構造体! (したがってエイリアス!)は実際にはポインタです。したがって、コンパイラは参照時にその値を提供します。これはメモリアドレスです。

あなたは単語、赤/システムコンパイラはそれに格納された値を提供します参照:あなたは、セットの単語(名前に追加:の変数)、コンパイラを使用する場合

print i    ;; will print the value stored in i 

をその中に保存した値:

i: 1    ;; stores 1 in variable i 

あなたが得る単語(名前の先頭に挿入:と変数)を使用すると、コンパイラは変数のアドレスを提供します。

int-ptr: :i   ;; stores the address of i in int-ptr 
関連する問題