C & C ++: Qual é a diferença entre ponteiro para e endereço da matriz?

Código C ++ 11:

int a[3];
auto b = a;       // b is of type int*
auto c = &a;      // c is of type int(*)[1]

Código C:

int a[3];
int *b = a;
int (*c)[3] = &a;

Os valores deb ec são iguais.

Qual é a diferença entreb ec? Por que eles não são do mesmo tipo?

UPDATE: Alterei o tamanho da matriz de 1 para 3.

questionAnswers(3)

yourAnswerToTheQuestion