Weird struct stuff
asdf via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Mar 1 17:11:55 PST 2016
import std.stdio : writeln;
struct foo
{
long* bar;
this (long l)
{
long d = l;
bar = &d;
}
}
int main()
{
foo f = foo(12345);
writeln(*f.bar);
//writefoo(f);
writeln(*f.bar);
return 0;
}
void writefoo(foo f)
{
writeln(*f.bar);
}
If I compile this with dmd, I get the obvious output
12345
12345
however, if I uncomment the line writefoo(f);, I get
12345
140724376879320
140724376879320
(the second number changes each time, and appears to be a memory
address)
Stranger still, if I change the constructor to
this (long l)
{
writeln("wtf?");
long d = l;
bar = &d;
}
I get
wtf?
12345
12289
4422212
The second and third numbers don't change
Why does this happen? Were these functional programming guys
right about impure functions having side effects after all?
More information about the Digitalmars-d-learn
mailing list