for循环从intPtr,如何?



我如何写一个for循环迭代浮点数组,给定的intPtr数组的开始?

这是Unity中的c#,所以我知道浮点数的字节数是4。但是当我试图从intPtr中通过简单地使用数字4作为值来增加时,我只有崩溃。

这是不能工作的地方:

float myFloatVar = 42.42f 
for ( int i = varIntPtr ; i < varIntPtr + 12 ; i+=4 ) {
presumedToBeAnArrayLocation[i] = myFloatVar * i;
}

给定数组开始的intPtr ?

如果你有一个指向数组开头的指针,那么除非该数组是外部固定的:你的代码已经不可挽回地损坏了——一个非托管指针不会随着GC移动而更新,所以你现在有未定义的行为。

如果我们假设它是固定的,或者是非托管内存(因此不受GC移动的影响),那么像:

float* typed = ptr.ToPointer();
for (int i = 0; i < count; i++)
{
float v = typed[i];
}

但是,在可能的情况下,通常最好使用span:

var typed = new Span<float>(ptr.ToPointer(), count);
foreach (var v in typed) {
}

最新更新