"CArray" (编译类型)

"CArray"::[type]

代表一个与 C 语言兼容的数组类型,包含指定类型的元素.

更多信息

  • "CArray"::[t] 在 C 语言中等价于 t*.
  • 类型为 "CArray" 的对象不会被自动管理内存,必须手动释放.
  • "CArray" 在与兼容 C 语言的外部库对接时可以使用.
  • 类型为 "CArray" 的对象在内部用指针表示.

函数构造

属性

  • 类型 "CArray"::[type]carrInformation[carr,"ElementType"] 给出 type .
  • FromRawPointer[carr,offset] 对 C 数组 carr 进行索引. 索引从 0 开始.

转换

    数组

  • 数组类型的范围可以从 Cast 到受托管 C 数组. 支持的数组类型包括 "ListVector""NumericArray""PackedArray".
  • "RawPointer" 和 "OpaqueRawPointer"

  • Cast 可用于在 C 语言数组和原始指针之间相互转换.

运行时错误

  • 索引是一种不安全操作,索引超过 C 数组的末端会导致崩溃.

范例

打开所有单元关闭所有单元

基本范例  (2)

创建一个内存管理的 C 数组,然后访问其中的一个元素:

表示一个来自外部库的函数,它需要一个 C 语言数组作为参数:

编译一个能够创建 C 数组并调用该函数的程序:

可能存在的问题  (1)

"Managed" 对象之外创建的 C 数组不会自动进行内存管理,必须手动释放. 编译一个可以创建非托管 C 数组的函数:

该函数泄露内存:

使用 DeleteObject 手动释放 C 数组:

得到的函数不泄露内存: