On Tuesday, 23 July 2013 at 16:34:54 UTC, John Colvin wrote:
void foo(ref int a)
{
        a = 5;
}

void main()
{
        int a = 0;
        int* aptr = &a;
        
        foo(*aptr);
        assert(a == 5);
        
        a = 0;
        
        int b = *aptr;
        foo(b);
        assert(b == 5);
        assert(a == 0);
}

The fact that adding an explicit temporary changes the semantics seems weird to me.

Thanks for the explanations people, I have now fixed a rather worrying mistake in my programming knowledge: WHAT IT ACTUALLY MEANS TO DEREFERENCE A POINTER!

Seriously, I've written programs in assembly and I still had it wrong. It's a wonder I ever wrote any correct code in my life.

Reply via email to