Ważne są nawiasy klamrowe wokół literału ciągu w deklaracji tablicy znaków? (np. char s [] = {„Hello World”))

Przez przypadek odkryłem, że liniachar s[] = {"Hello World"}; jest poprawnie skompilowany i wydaje się być traktowany tak samo jakchar s[] = "Hello World";. Czy to nie pierwszy ({"Hello World"}) tablica zawierająca jeden element, który jest tablicą char, więc deklaracja dla s powinna zostać odczytanachar *s[]? W rzeczywistości, jeśli zmienię go nachar *s[] = {"Hello World"}; kompilator to akceptuje, zgodnie z oczekiwaniami.

Szukając odpowiedzi, jedyne miejsce, które znalazłem, wspomniało o tymten ale nie cytuje się standardu.

Moje pytanie brzmi: dlaczego liniachar s[] = {"Hello World"}; jest kompilowany, chociaż lewa strona jest typuarray of char a prawa strona jest typuarray of array of char?

Oto działający program:

<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>

Dziękujemy za wszelkie wyjaśnienia.

P.S. Moim kompilatorem jest gcc-4.3.4.

questionAnswers(4)

yourAnswerToTheQuestion