Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用关键字fixed在C#中固定整个数组_C#_Fixed_Unsafe - Fatal编程技术网

如何使用关键字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先生的一些额外建议:和