#include <stdio.h>
char A[];
int main()
{
printf("%c\n",A[1]);
return 0;
}
index を使用して任意の要素にアクセスできます。エラーが発生することはありません。32ビットマシンでアクセスできる最大要素のインデックスは何ですか?
宣言char A[];
がファイル スコープにある場合は、配列を宣言します。配列の定義は別の場所にあるはずです。定義が同じファイル (翻訳単位) に表示されない場合、動作は、あたかもchar A[] = { 0 };
.
宣言が表示されるコードは、配列を使用できます。ただし、配列の定義が表示されない場合、コンパイラは配列のサイズを認識しません。実際に定義されている要素のみを使用するのは、コードの作成者の責任です。配列のサイズは、事前に調整するか、プログラムで情報を渡すことによって知る必要があります。
コードが存在しない配列の要素を使用する場合、または配列の末尾を超えて要素のアドレスを計算する場合でも、動作は未定義です。
A[1]
*(A+1)
は基本的にメモリアドレスとして変換されます。そのため、printf
そのメモリ位置にあるものは何でも印刷できます。その場所に何かが存在するまで配列を参照し続けることができると思います(これによりガベージが発生します)[そしてその場所へのアクセスが許可されます]。
編集: GCC 4.6.3は与えるwarning: array ‘A’ assumed to have one element [enabled by default]