如何使用关键字fixed在C#中固定整个数组
下面示例中的行如何使用关键字fixed在C#中固定整个数组,c#,fixed,unsafe,C#,Fixed,Unsafe,下面示例中的行是固定的(int*pArray=&array[0])固定整个数组,还是仅固定数组[0] int array = new int[10]; unsafe { fixed (int* pArray = &array[0]) { } // or just 'array' } 声明如下: fixed (int* pArray = array) fixed (int* pArray = &array[0]) 将修复完整的数组。证据可在(第18.6节固定声明,强调
是固定的(int*pArray=&array[0])
固定整个数组,还是仅固定数组[0]
int array = new int[10];
unsafe {
fixed (int* pArray = &array[0]) { } // or just 'array'
}
声明如下:
fixed (int* pArray = array)
fixed (int* pArray = &array[0])
将修复完整的数组。证据可在(第18.6节固定声明,强调部分)中找到:
固定指针初始值设定项可以是以下选项之一:
- 数组类型的表达式,其中包含非托管类型T的元素,前提是类型T*可以隐式转换为fixed语句中给定的指针类型。在这种情况下,初始值设定项计算数组中第一个元素的地址,整个数组保证在固定语句期间保持在固定地址。
声明如下:
fixed (int* pArray = array)
fixed (int* pArray = &array[0])
修复第一个数组元素的地址。同样,引用规范(来自该章中的示例):
…第三条语句修复并获取数组元素的地址
旁注:我假设任何修复第一个元素的sane实现都只修复整个数组,但规范似乎不能保证这一点 深入挖掘规范中的示例代码可以发现以下内容: 上面示例中的第四个fixed语句生成与第三个语句类似的结果
不幸的是,它们没有具体说明“相似结果”的确切含义,但值得注意的是它们没有说“相同的结果”。我认为没有。你必须做
修复(int*pArray=array)
@M.kazemAkhgary,没有,这不起作用:CS0208无法获取的地址、大小或声明指向托管类型的指针('int[])
@ThomasLevesque不要把&
放在array
之前。只要写(int*pArray=array)
@M.kazemAkhgary,很好。这样就行了。Lippert先生的一些额外建议:和