要素が 0 の配列は、割り当てられていないポインターと同じですか?
int arr[0];
と同じですかint* arr;
?
編集:これに似たようなことをしたらどうなりますか:
int x[0];
int* const arr = x;
このコードを試してみたところ、コンパイルされました。私の知る限り、x と arr の両方がメモリ内の同じ場所を指している必要があります。この場合、どのような違いがありますか?
全くない。
arr[0] の場合、arrには適切に定義されたアドレスがあります。
*arr の場合、arrは初期化されていません。
EDIT の後、直前に定義された配列でconst arrを初期化します。変数の内容に違いはありませんが、それらに対して実行できるアクションに違いはありません。
ローカルで宣言された長さゼロの配列はC++では無効であるため、未割り当てのポインターと同じではありません。
長さゼロの配列は、配列の先頭である特定のアドレスを指します。配列の終わりの後、この場合、指されたアドレスに未定義のデータがあります。
int arr[0];
int* ptr;
// arr is a reliable value;
// *arr is not;
// ptr is not;
これが役立つ 1 つの方法: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Zero-Length.html