在编译后的代码中创建一个新的指针对象,适合与外部程序库一起使用.
ToRawPointer[val]
创建一个指向初始值 val 的新对象.
ToRawPointer[p,val]
将 val 保存在指针 p 中.
ToRawPointer[array,offset,val]
将 val 保存在 "CArray" array 中指定的偏移位置处.
ToRawPointer
在编译后的代码中创建一个新的指针对象,适合与外部程序库一起使用.
ToRawPointer[val]
创建一个指向初始值 val 的新对象.
ToRawPointer[p,val]
将 val 保存在指针 p 中.
ToRawPointer[array,offset,val]
将 val 保存在 "CArray" array 中指定的偏移位置处.
更多信息
- ToRawPointer 只在编译代码中可用.
- ToRawPointer 分配堆栈上的内存.
- ToRawPointer 生成的指针在生成它的函数返回时失效.
- FromRawPointer 可用来提取 ToRawPointer 生成的指针的值.
- ToRawPointer[val] 创建 val 的副本并返回它的地址. 对副本做出的改变不会影响 val,反之亦然.
- ToRawPointer[array,offset,val] 可将元素储存在数组中.
- 可通过 CreateTypeInstance 进行动态内存分配,生成指针.
- ToRawPointer[] 的结果的类型为 .
- 在 C 语言中,以下用法与 ToRawPointer 的用法等同:
-
p=ToRawPointer[] int x; int* p = &x; p=ToRawPointer[val] int x = val; int* p = &x; ToRawPointer[p,val] *p = val; ToRawPointer[array,offset,val] array[offset] = val; or *(array+offset) = val;
范例
打开所有单元 关闭所有单元基本范例 (1)
范围 (2)
更新 (1)
ToRawPointer 可更新现有指针:
cf = FunctionCompile[Function[Typed[arg, "Integer64"],
With[{p = ToRawPointer[]}, ToRawPointer[p, arg];FromRawPointer[p]]
]]cf[4]偏移 (1)
ToRawPointer 可以为数组的不同元素赋值:
cf = FunctionCompile[Function[{Typed[arg, "Integer64"]}, Module[{arr},
arr = CreateTypeInstance[ "CArray"::["MachineInteger"], 2];
ToRawPointer[arr, 0, arg];
ToRawPointer[arr, 1, arg];
FromRawPointer[arr, 0] + FromRawPointer[arr, 0]
]]]cf[4]应用 (2)
funcDec = LibraryFunctionDeclaration["addonePointer", "compilerDemoBase", {"CInt", "RawPointer"::["CInt"]} -> "CInt"];cf = FunctionCompile[funcDec,
Function[Typed[n, "CInt"], Module[{ptr},
ptr = Typed[ToRawPointer[], "RawPointer"::["CInt"]];
LibraryFunction["addonePointer"][n, ptr];
FromRawPointer[ptr]
]]]cf[12]funcDec = LibraryFunctionDeclaration["sumArray", "compilerDemoBase", {"CArray"::["CLong"], "CLong"} -> "CLong"];编译一个使用 ToRawPointer 填充 "CArray" 的程序,以便可以将其传递给 "sumArray":
cf = FunctionCompile[funcDec,
Function[Typed[l, "PackedArray"::["MachineInteger", 1]],
Module[{array},
array = CreateTypeInstance["Managed"::["CArray"::["CLong"]], Length[l]];
Do[ToRawPointer[array, i - 1, Cast[l[[i]], "CLong", "CCast"]], {i, Length[l]}];
LibraryFunction["sumArray"][array, Cast[Length[l], "CLong", "CCast"]]
]]]cf[Range[10]]可能存在的问题 (2)
因为 ToRawPointer[val] 创建了指向 val 的副本的指针,修改指针的函数将不能修改原始的 val.
funcDec = LibraryFunctionDeclaration["incrementInput", "compilerDemoBase", {"RawPointer"::["CInt"]} -> "CInt"];编译一个程序,用一个变量初始化指针,调用修改指针的函数,然后返回原来的变量:
cf = FunctionCompile[funcDec,
Function[Typed[n, "CInt"], Module[{ptr},
ptr = ToRawPointer[n];
LibraryFunction["incrementInput"][ptr];
n
]]]因为 ToRawPointer[n] 创建了指向 n 的副本的指针,incrementInput 只修改指针引用的值,n 保持不变:
cf[12]ToRawPointer 生成的指针在生成它的函数返回时失效. 在指针失效后使用它可能会导致崩溃.
FunctionDeclaration[badFunction,
Typed[{} -> "RawPointer"::["MachineInteger"]]@
Function[{}, ToRawPointer[12]]
]编译在无效指针上调用 FromRawPointer 的函数可能会导致崩溃:
Function[{}, FromRawPointer[badFunction[]]]文本
Wolfram Research (2022),ToRawPointer,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ToRawPointer.html (更新于 2025 年).
CMS
Wolfram 语言. 2022. "ToRawPointer." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2025. https://reference.wolfram.com/language/ref/ToRawPointer.html.
APA
Wolfram 语言. (2022). ToRawPointer. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ToRawPointer.html 年
BibTeX
@misc{reference.wolfram_2026_torawpointer, author="Wolfram Research", title="{ToRawPointer}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/ToRawPointer.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_torawpointer, organization={Wolfram Research}, title={ToRawPointer}, year={2025}, url={https://reference.wolfram.com/language/ref/ToRawPointer.html}, note=[Accessed: 03-November-2026]}