Случайно я обнаружил, что строка 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<stdio.h>
int main() {
char s[] = {"Hello World"};
printf("%s", s); // Same output if line above is char s[] = "Hello World";
return 0;
}
Спасибо за любые разъяснения.
P.S. Мой компилятор - gcc-4.3.4.