问题描述
如果我有一个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
,因此您需要{em 1}}元素,则本地数量是在编译时确定的,而不是在运行时确定的。
我怀疑,当您需要单个内部数组时,在呼叫站点需要本地范围的fixed
-但这不是很成问题:fixed
是一种非常便宜的固定方式(实际上,它只是堆栈上的参考副本,而JIT从上下文中知道它的意思是“固定”)
那是说:我怀疑,您也许也可以在此处使用跨度,而不必使用fixed
或指针。