偶然にも、行char s[] = {"Hello World"};
が適切にコンパイルされており、 と同じように扱われていることがわかりましたchar s[] = "Hello World";
。最初の ( {"Hello World"}
) は char の配列である 1 つの要素を含む配列ではないので、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;
}
明確にしていただきありがとうございます。
PS 私のコンパイラは gcc-4.3.4 です。