我如何写一个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) {
}