Search code examples
c#.netunsafefixed-statement

Unsafe string pointer statement


As I understood, according to MSDN C# fixed statement should work like:

fixed (char* p = str) ... // equivalent to p = &str[0]

so, why I can`t do this?

    const string str = "1234";
    fixed (char* c = &str[0])
    {
/// .....
    }

How can I get pointer to str[1], for an example?


Solution

  • This is because the [] operator on the string is a method that returns a value. Return value from a method when it is a primitive value type does not have an address.

    [] operator in C# is not the same as [] in C. In C, arrays and character strings are just pointers, and applying [] operator on a pointer, is equivalent to moving the pointer and dereferencing it. This does not hold in C#.

    Actually there was an error in the MSDN documentation you linked, that is fixed in the latest version.

    See here for more explanation on this exact matter.