指针数组的动态分配及其替代方案

Dynamic allocation to array of pointers and its alternatives

使用 new int 分配数组的标准方法是:

 int* arr = new int[50];

以这种方式声明时,将进行连续的内存分配,并且变量堆栈中将有一个数组变量。

如果我想以 50 个不同的指针变量的形式声明它,以便每个指针都有不同的内存地址并且不一定是连续的,最明显的方法是这样的:

int * arr[50];

但是以这种方式分配内存的命令/代码是什么(即通过 new int )以及以每种方式声明的缺点或优点是什么。

显而易见的方法是遍历所有元素并为它们分配内存:

for (int i = 0; i < 50; i++){
    arr[i] = new int;
}

非连续内存块的缺点是缓存未命中。 您可以阅读更多关于 here.

的内容

如何分配,在中已经提到;故不再赘述。
对于单个 int 分配,您的下面一行是矫枉过正:

int* arr[50];  // all downsides only

相反,您应该使用简单的整数:

int arr[50];

更好地利用标准容器的设施,例如:

std::vector<int> vi;  // if the number of int-s are dynamic
std::array<int, 50> ai; // if the number of int-s are fixed

最后,来自this answer

"Avoid pointers until you can't... So the rule of thumb is to use pointers only if there is no other choice."