Klammern um das Zeichenkettenliteral in der Zeichenarray-Deklaration gültig? (z. B. char s [] = {“Hallo Welt”})

Durch Zufall habe ich festgestellt, dass die Leitungchar s[] = {"Hello World"}; ist richtig kompiliert und scheint genauso behandelt zu werden wiechar s[] = "Hello World";. Ist nicht der erste ({"Hello World"}) ein Array mit einem Element, das ein Array von char ist, daher sollte die Deklaration für s lautenchar *s[]? In der Tat, wenn ich es änderechar *s[] = {"Hello World"}; Der Compiler akzeptiert es auch, wie erwartet.

Auf der Suche nach einer Antwort war der einzige Ort, an dem ich dies erwähnte, derdieses aber es gibt kein Zitieren des Standards.

Also meine Frage ist, warum die Leitungchar s[] = {"Hello World"}; wird kompiliert, obwohl die linke Seite vom Typ istarray of char und die rechte Seite ist vom Typarray of array of char?

Es folgt ein Arbeitsprogramm:

<code>#include<stdio.h>
int main() {
    char s[] = {"Hello World"};
    printf("%s", s); // Same output if line above is char s[] = "Hello World";
    return 0;
}
</code>

Vielen Dank für eventuelle Klarstellungen.

P.S. Mein Compiler ist gcc-4.3.4.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage