Скобки вокруг строкового литерала в объявлении массива символов допустимы? (напр. char s[] = {"Hello World"})

Случайно я обнаружил, что строка char s[] = {"Hello World"};правильно скомпилирована и, кажется, обрабатывается так же, как char s[] = "Hello World";. Разве первый({"Hello World"})не является массивом, содержащим один элемент, который является массивом char, поэтому объявление для s должно читаться char *s[]? На самом деле, если я изменю его на char *s[] = {"Hello World"};, компилятор также примет его, как и ожидалось.

В поисках ответа я нашел единственное место, в котором упоминается это вот это , но стандарт не цитируется.

Итак, мой вопрос: почему строка char s[] = {"Hello World"};скомпилирована, хотя левая сторона имеет тип array of char, а правая — тип array of array of char?

Ниже приведена рабочая программа.:

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

Спасибо за любые разъяснения.

П.С. Мой компилятор — gcc -4.3.4.

50
задан halex 13 April 2012 в 08:46
поделиться