Ważne są nawiasy klamrowe wokół literału ciągu w deklaracji tablicy znaków? (np. char s [] = {„Hello World”))
Przez przypadek odkryłem, że liniachar s[] = {"Hello World"};
jest poprawnie skompilowany i wydaje się być traktowany tak samo jakchar s[] = "Hello World";
. Czy to nie pierwszy ({"Hello World"}
) tablica zawierająca jeden element, który jest tablicą char, więc deklaracja dla s powinna zostać odczytanachar *s[]
? W rzeczywistości, jeśli zmienię go nachar *s[] = {"Hello World"};
kompilator to akceptuje, zgodnie z oczekiwaniami.
Szukając odpowiedzi, jedyne miejsce, które znalazłem, wspomniało o tymten ale nie cytuje się standardu.
Moje pytanie brzmi: dlaczego liniachar s[] = {"Hello World"};
jest kompilowany, chociaż lewa strona jest typuarray of char
a prawa strona jest typuarray of array of char
?
Oto działający program:
<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>
Dziękujemy za wszelkie wyjaśnienia.
P.S. Moim kompilatorem jest gcc-4.3.4.