Случайно я обнаружил, что строка 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.