0

次の 2 種類の配列の違いは何ですか?

int array1[10];
int* array2 = new int[10];
4

2 に答える 2

3

主な違いは、動的配列がヒープ上に作成されることです。動的配列のサイズは、実行時に決定できます。

以下の違い:

int x = 10;
int array1[10];
int *array2 = new char[x];

array2実際の完全な配列ではなく、配列の最初の要素を指していますか。

ノート:

assert(sizeof(array1) == 40);
assert(sizeof(array2) == 4);

new で作成されたヒープ上のメモリは、最終的に を使用して破棄する必要がありますdelete。はヒープ上に作成され、配列であるためarray2、削除する必要がありdelete[]ます。

注: 実際には、最初の要素だけでなく、完全な配列へのポインターを作成できます。

int array1[10];
int *pointerToFirstElement = array1;
int (*pointerToFullArray)[10] = &array1;
int sizeOfFirstPointer = sizeof(pointerToFirstElement);
int sizeOfSecondPointer = sizeof(pointerToFullArray);
assert(sizeOfFirstPointer == sizeOfSecondPointer);//==4 since both are pointers

ただし、サイズが異なることを示しています。

int sizeOfFirst = sizeof(*pointerToFirstElement);
int sizeOfSecond = sizeof(*pointerToFullArray);
assert(*sizeOfFirst == 4);
assert(*sizeOfSecond == 40);
于 2010-02-27T16:54:29.713 に答える
1

動的配列は実行時にヒープ メモリから作成され、必要に応じて new/delete キーワードを使用して動的にサイズ変更/解放できます。配列はコンパイル時に静的に定義され、常にその量のメモリを使用します。

于 2010-02-27T16:56:02.247 に答える