address 属性

Pointer<Never> address
获取/设置对

底层数据的内存地址。

形式为 expression.address 的表达式表示此 address,只能在调用叶 Native 外部函数时作为整个参数表达式出现。

只能用于 Struct 子类型的字段、Union 子类型的字段、Array 元素或 TypedData 元素上。换句话说,正在访问其地址的数字本身必须通过 StructUnionArrayTypedData 来访问。

示例

@Native<Void Function(Pointer<Float>)>(isLeaf: true)
external void myFunction(Pointer<Float> pointer);

final class MyStruct extends Struct {
  @Float()
  external double x;

  @Float()
  external double y;

  @Array(10)
  external Array<Float> array;
}

void main() {
  final myStruct = Struct.create<MyStruct>();
  myFunction(myStruct.y.address);
  myFunction(myStruct.array[5].address);

  final list = Float32List(10);
  myFunction(list[5].address);
}

.address 之前的表达式像赋值运算符的左侧一样被评估,得到可以访问表达式背后的存储的内容,这既可以用于读取也可以用于写入。然后,.address 提供对该存储的本地指针。

在调用叶 Native 外部函数时,.address 被评估,以确保 Dart 垃圾收集器不会移动地址指向的对象。

实现

external Pointer<Never> address;