如果我有一个预先知道数组长度的 double[,] 对象数组,那么我可以像这样设置一个指向 double[,] 对象的指针数组:
int NumMatrices = 3;
double[][,] VectorOfMatrix = new double[NumMatrices][, ];
for (int i = 0; i < VectorOfMatrix.Length; i++) VectorOfMatrix[i] = new double[10, 10];
unsafe {
fixed (double* fpM0 = VectorOfMatrix[0], fpM1 = VectorOfMatrix[1], fpM2 = VectorOfMatrix[2]) {
double** ppMatrix = stackalloc double*[3];
ppMatrix[0] = fpM0;
ppMatrix[1] = fpM1;
ppMatrix[2] = fpM2;
...
}
}
但是如果事先不知道数组的长度,那么等价的事情怎么做呢?
最终,你不能。它是“本地”上的一个标记,它从 JIT 的角度定义了某些东西fixed
,因此每个元素都需要一个“本地” fixed
,并且本地的数量是在编译时确定的,而不是运行时。
我怀疑fixed
当你需要一个单独的内部数组时,你会需要一个本地范围的调用站点 - 但这不是很成问题:fixed
是一种非常便宜的固定方式(它实际上只是堆栈上的一个引用副本,具有JIT 从上下文中知道它的意思是“固定”)
也就是说:我怀疑你也可以在这里使用跨度,并绕过整个使用fixed
或指针的需要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句