Was bedeutet es, die Adresse der Array-Variablen zu erhalten?

Heute habe ich ein C-Snippet gelesen, das mich wirklich verwirrt:

#include <stdio.h>

int
main(void)
{
    int a[] = {0, 1, 2, 3};

    printf("%d\n", *(*(&a + 1) - 1));
    return 0;
}

Meiner Meinung nach,&a + 1 macht keinen Sinn, läuft aber fehlerfrei.

Kann jemand erklären, was es bedeutet, danke. Und deckt K & R C Bible dies ab?

UPDATE0: Nachdem ich die Antworten gelesen habe, stelle ich fest, dass mich diese beiden Ausdrücke hauptsächlich verwirren:

&a + 1, das in SO gefragt wurde:Über den Ausdruck "& anArray" in c

*(&a + 1) -1, was mit dem Zerfall von Arrays zusammenhängt.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage