Chaves em torno de string literal na declaração de matriz de caracteres válida? (por exemplo, char s [] = {“Hello World”})

Por acaso, descobri que a linhachar s[] = {"Hello World"}; está devidamente compilada e parece ser tratada da mesmachar s[] = "Hello World";. Não é o primeiro ({"Hello World"}) uma matriz contendo um elemento que é uma matriz de char, portanto, a declaração para s deve ser lidachar *s[]? Na verdade, se eu mudar isso parachar *s[] = {"Hello World"}; o compilador aceita também, como esperado.

Procurando por uma resposta, o único lugar que encontrei que mencionou isso éeste mas não há citações do padrão.

Então, minha pergunta é: por que a linhachar s[] = {"Hello World"}; é compilado embora o lado esquerdo seja do tipoarray of char e o lado direito é do tipoarray of array of char?

A seguir está um programa de trabalho:

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

Obrigado por quaisquer esclarecimentos.

P.S. Meu compilador é gcc-4.3.4.

questionAnswers(4)

yourAnswerToTheQuestion