Casting pointers

John Burton via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Aug 26 05:14:53 PDT 2015


This would be undefined behavior in c++ due to aliasing rules on 
pointers. It appears to "work" reliably in D when I try it, but 
that's obviously no guarantee that it's correct or will continue 
to do so.

Is this correct code in D? And if not, what should I do instead 
to cleanly and efficiently extract structured data from a 
sequence of bytes?

import std.stdio;

struct data
{
     int a;
     int b;
}

void main()
{
     byte[] x = [1, 2, 3, 4, 5, 6, 7, 8];

     data* ptr = cast(data*)(x);
     printf("%x %x\n", ptr.a, ptr.b);

}


More information about the Digitalmars-d-learn mailing list