为什么不能在unsafe-statement中获取变量的地址?

时间:2013-02-26 20:43:27

标签: c#

根据MSDN,我们可以在不安全的环境中获取变量的地址 我们可以在不安全的声明方法中获取变量的地址,但为什么不能在所有不安全的上下文中获取它?

static void Main(string[] args) {      
    //Managed code here
    unsafe {
        string str = "d";
        fixed (char* t = &str[0]) {// ERROR :  Cannot take the address of the given expression
        }
    }
    //Managed code here
}

2 个答案:

答案 0 :(得分:2)

这只是无效的C#语法。字符串不是数组,它只是一个。尝试:

unsafe 
{
   string str = "d";
   fixed (char* t = str) 
   {
       char c1 = *t;
       char c2 = t[0];
   }
}

答案 1 :(得分:1)

获取字符串地址的正确方法如下:

char* t = str

http://msdn.microsoft.com/en-us/library/f58wzh21.aspx