如果您想要能够在运行时更改数组大小,则应使用动态数组声明。这些是通过指针和new运算符完成的。关于指针的基础知识,请阅读指针部分。
使用new分配内存,然后以与静态数组相同的方式访问数组。例如,
int* arrayPtr = new int[10]; for (int i = 0; i < 10; i++) { arrayPtr[i] = i; }
内存图像与静态数组相同,但如果需要,可以更改大小。不要忘记在分配新内存之前必须释放内存(否则将会有内存泄漏)。
delete [] arrayPtr; //删除指向数组指针时需要使用[] arrayPtr = new int[50]; . . .
当您完全完成对数组的操作时,必须删除其内存:
delete [] arrayPtr;
动态多维数组与Java类似。您将会有指针指向指针。例如,请参阅
我的理解是,在C中,数组只是对数组中第一个元素的内存地址的引用。
那么,int *pointerArray = new int [10];
和int array[10];
有什么区别(如果有的话)?
我已经进行了一些测试,看起来它们做的事情完全相同。这个网站是错的还是我读错了?
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
// Initialize the pointer array
int *pointerArray = new int[10];
for (int i = 0; i < 10; i++){
pointerArray[i] = i;
}
// Initialize the regular array
int array[10];
for (int i = 0; i < 10; i++){
array[i]= i;
}
cout << *(pointerArray + 5) << endl;
cout << *(array + 5) << endl;
cout << pointerArray[5] << endl;
cout << array[5] << endl;
cout << pointerArray << endl;
cout << array << endl;
return 0;
}
输出:
5
5
5
5
0x8f94030
0xbfa6a37c
我已经尝试按照网站上的描述“动态调整大小”我的指针数组,但是我的新(更大)指针数组最终被填充了0,这并不是很有用。
T*
上执行算术运算时,+ 5
表示+ 5 * sizeof(T)
。 - Matthieu M.delete[] pointerArray
释放内存。 - mkaesvector
类来表示动态数组。有一种观点认为,教授C++的目标是通过只教授所有最糟糕的方法来使学生尽可能地产生错误。鉴于你找到的资料遵循这种理念,如果你想学习C ++,最好的选择是尖叫着逃跑,然后去购买一本C++的书籍。 - jalfstd::vector
更好的替代品,但他们还是谈论使用new[]
创建动态数组。 - Naveen