Asignación de matriz

Dejame explicarte con un ejemplo

#include <iostream>

void foo( int a[2], int b[2] ) // I understand that, compiler doesn't bother about the
                               // array index and converts them to int *a, int *b
{
    a = b ;  // At this point, how ever assignment operation is valid.

}

int main()
{
    int a[] = { 1,2 };
    int b[] = { 3,4 };

    foo( a, b );

    a = b; // Why is this invalid here.

    return 0;
}

Es porque, la matriz decae a un puntero cuando se pasa a una funciónfoo(..), la operación de asignación es posible. Y enmain, ¿es porque son del tipoint[] que invalida la operación de asignación. Noa,b en ambos casos significa lo mismo? Gracias

Edit 1:

Cuando lo hago en una funciónfoo, está asignando elb's ubicación del elemento inicial aa. Entonces, pensando en términos de lo que hizo que los desarrolladores de lenguaje no hicieran lo mismo enmain(). Quiere saber la razón.