数组和动态数组有什么区别?

时间:2010-02-27 16:53:28

标签: c++ arrays dynamic-allocation

以下两种类型的数组有什么区别?

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

动态数组是在运行时从堆内存创建的,可以根据需要使用new / delete关键字动态调整大小/释放。数组在编译时静态定义,并且总是在任何时候占用该数量的内存。