8

要素が 0 の配列は、割り当てられていないポインターと同じですか?

int arr[0];と同じですかint* arr;

編集:これに似たようなことをしたらどうなりますか:

int x[0];
int* const arr = x;

このコードを試してみたところ、コンパイルされました。私の知る限り、x と arr の両方がメモリ内の同じ場所を指している必要があります。この場合、どのような違いがありますか?

4

3 に答える 3

13

全くない。

arr[0] の場合、arrには適切に定義されたアドレスがあります。

*arr の場合、arrは初期化されていません。

EDIT の後、直前に定義された配列でconst arrを初期化します。変数の内容に違いはありませんが、それらに対して実行できるアクションに違いはありません。

于 2012-04-20T15:15:57.107 に答える
4

ローカルで宣言された長さゼロの配列はC++では無効であるため、未割り当てのポインターと同じではありません。

于 2012-04-20T15:27:20.737 に答える
0

長さゼロの配列は、配列の先頭である特定のアドレスを指します。配列の終わりの後、この場合、指されたアドレスに未定義のデータがあります。

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

于 2012-04-20T15:22:23.093 に答える