6

如何在 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)

任何人都知道如何做到这一点?

问候,

阿诺德

4

1 回答 1

6

由于 ptr 和 buffer 都是指向整数数据的指针,因此您只需将一个分配给另一个:

ptr: buffer

:variable语法只需要获取 Java 中所谓的“原始”类型的地址。这相当于字节!,整数!,浮点!,float32!和逻辑!在当前版本的 Red/System 中。如果没有前导:,编译器将提供存储在变量中的值。

所有其他类型,例如 c-string!和结构!(因此别名!)实际上是指针。因此编译器在引用它们时提供它们的值,即内存地址。

当您引用一个单词时,Red/System 编译器会提供存储在其中的值:

print i             ;; will print the value stored in i

当您使用 set-word(名称后附有 a 的变量:)时,编译器会在其中存储一个值:

i: 1                ;; stores 1 in variable i

当您使用 get-word(:在名称开头插入 a 的变量)时,编译器会提供变量的地址。

int-ptr: :i         ;; stores the address of i in int-ptr
于 2013-06-20T09:08:20.517 回答