无法在C#中将关键字“fixed”用于变量

5

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

static void Main() {

    int value = 12345;
    unsafe {
        fixed (int* pValue = &value) { // problem here
            *pValue = 54321;
        }
    }
}

代码fixed(int* pValue = &value)会导致编译错误。因为变量value已经超出了unsafe块,且未被锁定。

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


2
你应该每个问题只问一个问题,而不是几个问题。同时,你也没有包含相关代码的实际错误信息。 - Servy
3
fixed被用来固定一个数组的类型,而不是单个变量的类型。 - M.kazem Akhgary
1
@M.kazemAkhgary fixed 在不同的上下文中有两个完全不同的意义。它用于在结构体中内联创建数组,也用于将值固定在内存中,以便在非托管代码中访问时不能被 GC 移动。 - Servy
你是否尝试将 value 放置在不安全代码块中? - Frecklefoot
3
"int value = 12345;" 是一个已经固定的表达式,因此你只需要它的指针。"int* pointer = &value;" - M.kazem Akhgary
1个回答

15

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

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

如果您需要value的地址,则不需要使用fixed语句,可以直接获取:

int* pValue = &value;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接