On Saturday, 11 January 2014 at 20:17:14 UTC, Tobias Pankrath
wrote:
class X {};
X x;
x is an reference to an instance of X, with other words a
pointer without arithmetic but with syntax sugar. &x will take
the address of this pointer/reference. If you want the address
of the actual instance, you can use cast(void*) for example.
Hi Tobias, can casting the address to void* make a difference to
its value?
Here's an example of what I don't understand:
import std.stdio;
import std.string: format;
class Foo {
int x;
}
void printAddress(Foo foo) {
writeln("Address of parameter foo is %x".format(&foo));
writeln("Address of parameter foo cast to void* is
%x".format(cast(void*) &foo));
}
void main() {
auto foo = new Foo();
writeln("Address of foo is %x".format(&foo));
writeln("Address of foo cast to void* is %x".format(cast(void*)
&foo));
printAddress(foo);
}
When run I get:
Address of foo is 7fff40ac4558
Address of foo cast to void* is 7fff40ac4558
Address of parameter foo is 7fff40ac4538
Address of parameter foo cast to void* is 7fff40ac4538
So why is the address of the parameter foo different to the
address of main foo, when they both refer to the same object?
thanks