über den Ausdruck "& anArray" in c

Zuerst habe ich gelesen, dass:

array&array&array[0]

werden alle gleich sein, solange "array" wirklich ein Array ist. Also habe ich versucht:

int main(){ 
     char ar[]={'a','b','c','\0'};
     printf("argument: &ar     %s\n",&ar);
     printf("argument: &ar[1]    %s\n",&ar[1]);
}

die Ausgabe:

argument:&ar   abc  
argument:&ar[1]  bc

Es scheint, dass&ar wird als Zeiger auf das erste Element anstelle eines Zeigers auf "ar" genommen, der selbst ein Zeiger auf das erste Element ist, wenn ich mich nicht irre.

Weil das nicht sein sollte, wie & (Zeiger auf ein Zeichen) behandelt wird, habe ich versucht:

char a='s';
char *pa=&a;
printf("argument: &pa   %c\n",&pa);

Die Ausgabe für%c ist nicht einmal ein Charakter. Es sollte auch nicht sein, wie ein Zeiger auf das erste Element eines Arrays behandelt wird. Ich habe es versucht:

char *pa=&ar[0];
char **ppa= &pa;
printf("argument: &pa   %s\n", ppa);

Die Ausgabe für%s ist nicht überraschend Unsinn; aber warum nicht&ar Unsinn gewesen? Für wennar waren ein Zeiger, sollte nicht&ar sei so viel ein Zeiger auf einen Zeiger wie er istppa?

Meine Fragen:

Wird "&" einfach ignoriert, wenn es vor einem Arraynamen steht? Sind Array-Namen einfach etwas Besonderes?Wenn ja, wie überprüft der Compiler, ob der Bezeichner nach "&" eine Referenz auf ein Array ist? Sucht es tatsächlich danach in einer Liste von Arrays, die so deklariert wurden?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage