On Sep 22, 2006, at 6:44 PM, Russel Caldwell wrote:

Sorry about this but this conversation has uncovered an apparent
misunderstanding on my part about arrays. When I do the following:

    int foo[5] = {1, 2, 3}

    cout << &foo;       //I get an address
    cout << foo;         //I get the same address
    cout << &foo[0];   //I get the same address
    cout << foo[0];     //I get the value stored in the first slot

What this seems to be telling me is that the address of foo[0] is stored at
the same address as the value of foo[0]. What am I missing?


foo is of the type int array. This means that the memory for it got allocated right there on your stack and the compiler knows that 'foo' refers to it. Taking the address of an array variable yields the address of the memory block allocated for it. Evaluating it without a subscript also yields the address of the memory allocated for it. Subscripting the variable yields the int stored at the given offset in the array. Taking the address of a subscripted array therefore yields the address of the int, which, in the case of the first one, is the same address as the memory block allocated for the array.

This is all either incredibly nasty or incredibly elegant, depending on whether or not you actually like thinking of the world as a single big array.

--Levi
/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to