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