C# Can';不要使用关键字';固定的';对于C中的变量#

C# Can';不要使用关键字';固定的';对于C中的变量#,c#,pointers,fixed,unsafe,C#,Pointers,Fixed,Unsafe,我用数组和字符串变量测试了关键字fixed,效果非常好,但不能用单个变量 static void Main() { int value = 12345; unsafe { fixed (int* pValue = &value) { // problem here *pValue = 54321; } } } 行fixed(int*pValue=&value)导致编译器错误。我没有得到它,因为变量值已超出

我用数组和字符串变量测试了关键字
fixed
,效果非常好,但不能用单个变量

static void Main() {

    int value = 12345;
    unsafe {
        fixed (int* pValue = &value) { // problem here
            *pValue = 54321;
        }
    }
}
fixed(int*pValue=&value)
导致编译器错误。我没有得到它,因为变量
已超出
不安全
块,并且它尚未固定


为什么我不能对变量
value
使用
fixed

这是因为
value
是一个局部变量,分配在堆栈上,所以它已经固定了。错误消息中提到了这一点:

CS0213不能使用fixed语句获取已固定表达式的地址

如果需要
值的地址
,则不需要
固定的
语句,可以直接获取:

int* pValue = &value;

你应该每个问题只问一个问题,而不是几个问题。您还没有包含有关代码的实际错误消息。fixed用于修复数组,而不是单个类型。@M.kazemAkhgary
fixed
在不同上下文中有两个完全正交的含义。它用于在结构中创建内联数组,并用于将值固定在内存中,以便GC在非托管代码中访问该值时无法移动该值。您是否尝试将
value
放置在不安全块中?
int value=12345已是固定表达式。所以你只需要它的指针<代码>int*指针=&value