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?
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.