Diferencia entre `a` y` & a` en C ++ donde `a` es una matriz

Estoy confundido acerca de la salida del siguiente código.

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
  int a[] = {1,2,3};
  cout << a         << "  " << &a         << endl;
  cout << sizeof(a) << "  " << sizeof(&a) << endl;
  return 0;
}

La salida es

0xbfcd3ae4  0xbfcd3ae4
12  4

Como puedea y&a imprimir la misma expresión pero tienen diferentes tamaños? Siempre pensé que para cualquier matriz, su nombre siempre tiene el valor = dirección del primer byte.

también&a no debería tener sentido, ya que uno no puede tener una dirección (obtenida con el operador &) en una dirección (el valor de a). Sin embargo, el código proporciona una salida e infact 'a == & a' de acuerdo con la salida.

Del mismo modo, ¿por qué es la salida desizeof(a) = 12 (¿cuál es la memoria total ocupada) por la matriz?a siendo un "puntero" en sí mismo sizeof (a) = 4 bytes (en mi Ubuntu 11.04 de 32 bits)

Obviamente hay algún error que estoy teniendo. ¿Podría alguien arreglar esto por mí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta