Thread overview
Re: implicite deref on array element access? (indexing)
Feb 25, 2011
Andrej Mitrovic
Feb 25, 2011
Andrej Mitrovic
Feb 25, 2011
Andrej Mitrovic
Feb 26, 2011
Jonathan M Davis
February 25, 2011
This should explain everything:

    auto a = [1,2,3];
    auto pa = &a;
    writeln(&pa);
    writeln(&pa+1);

Do the math!
February 25, 2011
Actually that doesn't explain anything!

What I mean is, arrays in D are not the same as arrays in C.

    auto a = [1, 2, 3];
    auto pa = &a;

    writeln(&a[0]);
    writeln(&a[1]);
    writeln(&a[2]);

    writeln(&pa[0]);
    writeln(&pa[1]);
    writeln(&pa[2]);

9A2E40
9A2E44
9A2E48
12FE34
12FE3C
12FE44

Afaik D arrays have a length and then a pointer to the contents of the array (someone correct me on this if I'm wrong?).
February 25, 2011
P.S. I got bitten by this when I was interfacing with C. Only in my case I used multidimensional arrays. I just assumed they were the same thing as in C, but I was wrong.
February 26, 2011
On Friday, February 25, 2011 07:15:52 spir wrote:
> Hello,
> 
> I thought it worked, just like implicite deref on (struct, class) member access. But I cannot have it work:
> 
>      auto a = [1,2,3];
>      auto pa = &a;
>      writeln((*pa)[2]);      // ok
>      writeln(pa[2]);         // segfault
> 
> Denis

The _only_ time that dereferencing is done automatically in D is with the dot operator.

- Jonathan M Davis