不能取给定表达式C#指针的地址

Sna*_*ake 5 c# pointers

在不安全的上下文中考虑以下代码:

string mySentence = "Pointers in C#";

fixed (char* start = mySentence) // this is the line we're talking about
{
    char* p = start;

    do
    {
        Console.Write(*p);
    }
    while (*(++p) != '\0');
}

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

这很好用.

根据http://msdn.microsoft.com/en-us/library/f58wzh21(v=VS.100).aspx我应该能够替换我标记的行

fixed(char* start = &mySentence[0])
Run Code Online (Sandbox Code Playgroud)

但不幸的是VS给了我以下错误.

无法获取给定表达式的地址

这个错误在我身边吗?

VS.NET 2010 Premium.

Eri*_*ert 12

这个错误在我身边吗?

没有; 错误发生在您链接到的文档中.它指出:

fixed (char* p = str) { /*...*/ }  // equivalent to p = &str[0]
Run Code Online (Sandbox Code Playgroud)

评论不正确; 正如您所记录的那样,获取字符串内部的地址是不合法的.获取数组内部的地址是合法的.

固定声明的合法初始化者是:

  • 地址运算符&应用于变量引用.
  • 数组
  • 一个字符串
  • 固定大小的缓冲区.

str[0]不是变量引用,因为首先,字符串元素不是变量,第二,因为这是对索引函数的调用,而不是对变量的引用.它也不是数组,字符串或固定大小的缓冲区,因此它不应该是合法的.

我将与文档管理员聊聊,我们将看看是否可以在以后的文档修订版中修复此问题.谢谢你引起我的注意.

更新:我已经与其中一位文档管理员交谈,他们告诉我,我们刚刚通过了下一次计划修订文档的截止日期.建议的更改将在下一个版本的队列中进行修订.