On Tuesday, 21 October 2014 at 14:25:20 UTC, ketmar via
Digitalmars-d-learn wrote:
On Tue, 21 Oct 2014 13:43:29 +0000
Solomon E via Digitalmars-d-learn
<digitalmars-d-learn@puremagic.com>
wrote:
`b[0] = 8;` or `b[] = 8;` changes a. Printing the values for
&a and &b shows they're different pointers, but (a is b)
returns true. So I still have more to learn about how it does
that.
that's 'cause '&b' taking address of hidden "array structure",
not
the first array element, as in C. try 'a.ptr' and 'b.ptr' to get
addresses of array elements.
Thanks, that's what I was looking for, in order to understand
what's going on. I Googled for it on this site, but without
remembering the keyword ptr, I didn't find anything relevant.
After I put printouts of .ptr in my test program, I figured out
how to get the same result by unsafe pointer arithmetic.
Apparently, for an array a, a.ptr == *(cast(ulong*) &a + 1).
That's unsafe because the implementation might change, and
pointer arithmetic is unsafe in general.