如何使用指向指针的指针(int **)分配一维数组

3
什么是“不同之处”?
void AllocateArray(int **arr,int size)

并且:

void AllocateArray(int *arr,int size)

我需要使用两者之一来分配一维数组,它们有什么区别?


你的意思是“我必须使用两个一维数组来分配吗?” - songyuanyao
2个回答

2

我认为应该这样使用:

int* arr;
AllocateArray(&arr, 10);
// array has been allocated, use arr[0]...arr[9].
// ...
delete[] arr;  // don't forget this

根据函数名,它可能会为数组分配内存。例如:

void AllocateArray(int **arr,int size) {
    *arr = new int[size];
}

第二个AllocateArray函数的参数(即int *arr)是按值传递的,这意味着即使内存在函数内部分配,它与外部变量无关。

1
如何使用指向指针(int **)来分配1D数组
int **p=new int*[1];
*p=new int[20];

但为什么呢?这样做太糟糕了。

有什么区别吗?

void AllocateArray(int **arr,int size)可以改变数组的地址,而不仅仅是其内容。换句话说:

int *p;
AllocateArray(&p,5);

能够更改指向 p 的位置。 void AllocateArray(int *arr, int size) 只能改变数组的内容。换句话说:
int *p;
AllocateArray(p,5);

将更改p的内容,而不更改其指向位置。

附注:我知道pointer!=array,但由于这是一个基础问题,我不需要深入探讨。

最终注释:

请使用std::vector代替所有这些指针。您将感到安心并倍受爱戴。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接