【问题标题】:Pointers to an 'array' in Red/System指向红色/系统中的“数组”的指针
【发布时间】:2013-06-19 15:14:15
【问题描述】:

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

有人知道怎么做吗?

问候,

阿诺德

【问题讨论】:

  • 请注意,: 不是 get "operator"。它根本不是运营商。因此,您不能组合冒号来实现 get-of-a-get (::buffer),也不能放置空格 (: buffer)。这与 Rebol 和 Red 与其他语言非常不同的原因有关。前导 ':' 是一个信号,表示您正在装饰的符号被“调味”为 GET-WORD!。尽管有这些“味道”(到目前为止比 Lisp 还多),但它仍然只是象征性地处理的东西。 Rebol/Red 以一种装扮成“普通”语言的方式处理它们,但您自己的方言可以这样做!

标签: arrays pointers red red-system


【解决方案1】:

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

ptr: buffer

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

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

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

print i             ;; will print the value stored in i

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

i: 1                ;; stores 1 in variable i

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

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

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 2021-02-07
    • 2020-03-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多