[ACCEPTED]-Cannot take the address of the given expression C# pointer-pointers
Is the error on my side?
No; the error is 22 in the documentation you linked to. It 21 states:
fixed (char* p = str) { /*...*/ } // equivalent to p = &str[0]
The comment is incorrect; as you 20 correctly note, it is not legal to take 19 the address of the interior of a string. It 18 is only legal to take the address of the 17 interior of an array.
The legal initializers 16 for a fixed statement are:
- The address operator
&
applied to a variable reference. - An array
- A string
- A fixed-size buffer.
str[0]
is not a variable 15 reference, because first, string elements 14 are not variables, and second, because this 13 is a call to an indexing function, not a 12 reference to a variable. Nor is it an array, a 11 string, or a fixed-size buffer, so it should 10 not be legal.
I'll have a chat with the documentation 9 manager and we'll see if we can get this 8 fixed in a later revision of the documentation. Thanks 7 for bringing it to my attention.
UPDATE: I 6 have spoken to one of the documentation 5 managers and they have informed me that 4 we have just passed the deadline for the 3 next scheduled revision of the documentation. The 2 proposed change will go in the queue for 1 the revision after next.
This doesn't work because you're trying 2 to access a string. If you change your code 1 to:
char[] mySentence = "Pointers in C#".ToCharArray();
fixed (char* start = &mySentence[0])
{
char* p = start;
do
{
Console.Write(*p);
}
while (*(++p) != '\0');
}
Console.ReadLine();
everything will work fine.
mySentence[0] returns a readonly single 1 character, you cannot get a pointer to that.
Use:
fixed(char* start = &mySentence)
instead.
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.