digitalmars.D.learn - implicite deref on array element access? (indexing)
- spir (12/12) Feb 25 2011 Hello,
- Jesse Phillips (4/13) Feb 25 2011 You aren't making a pointer to the data, only the array. I probably woul...
- Steven Schveighoffer (6/13) Feb 25 2011 Because indexing a pointer like ptr[n] is the equivalent of *(ptr + n).
- Andrej Mitrovic (2/4) Feb 25 2011 Can't you do the same with -noboundscheck ?
- Steven Schveighoffer (8/12) Feb 25 2011 No, -noboundscheck stops bounds checking everywhere. arr.ptr[n] stops
- spir (10/24) Feb 25 2011 All right! This is what I did not get. Thank you, Steve.
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 -- _________________ vita es estrany spir.wikidot.com
Feb 25 2011
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]); // segfaultYou aren't making a pointer to the data, only the array. I probably would have made the same mistake, but I think you want to use: auto pa = a.ptr; Don't know if there is a ptr property for array.
Feb 25 2011
On Fri, 25 Feb 2011 10:15:52 -0500, spir <denis.spir gmail.com> 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]); // segfaultBecause indexing a pointer like ptr[n] is the equivalent of *(ptr + n). This is how it is in C. Fun fact, you can avoid array bounds checks (if you know the index is valid) by doing arr.ptr[n] -Steve
Feb 25 2011
On 2/25/11, Steven Schveighoffer <schveiguy yahoo.com> wrote:Fun fact, you can avoid array bounds checks (if you know the index is valid) by doing arr.ptr[n]Can't you do the same with -noboundscheck ?
Feb 25 2011
On Fri, 25 Feb 2011 10:58:49 -0500, Andrej Mitrovic <andrej.mitrovich gmail.com> wrote:On 2/25/11, Steven Schveighoffer <schveiguy yahoo.com> wrote:No, -noboundscheck stops bounds checking everywhere. arr.ptr[n] stops bounds checking for that one statement. It's a lot easier to prove that one time that bounds checking is not necessary than it is to prove that no bounds checking is necessary anywhere. Plus, you can't always control the command line. -SteveFun fact, you can avoid array bounds checks (if you know the index is valid) by doing arr.ptr[n]Can't you do the same with -noboundscheck ?
Feb 25 2011
On 02/25/2011 04:43 PM, Steven Schveighoffer wrote:On Fri, 25 Feb 2011 10:15:52 -0500, spir <denis.spir gmail.com> wrote:All right! This is what I did not get. Thank you, Steve. Too bad. Anyway, in the meanwhile I have opted for another approach. (FWIW, in Oberon implicite deref works on array indexing just like on struct [record] member access.) Denis -- _________________ vita es estrany spir.wikidot.comHello, 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]); // segfaultBecause indexing a pointer like ptr[n] is the equivalent of *(ptr + n). This is how it is in C. Fun fact, you can avoid array bounds checks (if you know the index is valid) by doing arr.ptr[n]
Feb 25 2011