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

Reply via email to