Braces alrededor de cadena literal en la declaración de matriz de caracteres válida? (por ejemplo, char s [] = {“Hello World”})

Por casualidad encontré que la línea.char s[] = {"Hello World"}; está correctamente compilado y parece ser tratado igual quechar s[] = "Hello World";. No es el primero ({"Hello World"}) una matriz que contiene un elemento que es una matriz de caracteres, por lo que la declaración para s debe leersechar *s[]? De hecho si lo cambio porchar *s[] = {"Hello World"}; El compilador también lo acepta, como se esperaba.

Buscando una respuesta, el único lugar que encontré que mencioné esto eséste pero no hay ninguna cita de la norma.

Así que mi pregunta es, ¿por qué la líneachar s[] = {"Hello World"}; Se compila aunque el lado izquierdo es de tipo.array of char Y el lado derecho es de tipo.array of array of char?

El siguiente es un programa de trabajo:

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

Gracias por cualquier aclaración.

PD Mi compilador es gcc-4.3.4.

Respuestas a la pregunta(4)

Su respuesta a la pregunta