addr操作符

addr 运算符返回左值的地址。 如果位置的类型是 T ,则 addr 运算符结果的类型为 ptr T 。 地址是未追踪引用。 获取驻留在堆栈上的对象的地址是 不安全的 ,因为指针可能比堆栈中的对象存在更久,因此可以引用不存在的对象。

可以获取变量的地址,但是不能在通过 let 语句声明的变量上使用它:

  1. let t1 = "Hello"
  2. var
  3. t2 = t1
  4. t3 : pointer = addr(t2)
  5. echo repr(addr(t2))
  6. # --> ref 0x7fff6b71b670 --> 0x10bb81050"Hello"
  7. echo cast[ptr string](t3)[]
  8. # --> Hello
  9. # 下面的行不能编译:
  10. echo repr(addr(t1))
  11. # 错误: 表达式没有地址