如何通过使用指向指针(int **)来分配1D数组

时间:2016-02-11 08:47:19

标签: c++ arrays pointers pointer-to-pointer

有什么区别
void AllocateArray(int **arr,int size)

void AllocateArray(int *arr,int size)

我必须同时使用两者分配1D数组,有什么区别?

2 个答案:

答案 0 :(得分: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 :(得分: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的内容而不更改其指向的位置。

P.S。我知道pointer != array但是因为这是一个基本问题,所以我不需要深入研究OP的细节。

最后注意事项:

请使用std::vector代替所有这些指针。你会平静下来并感受到爱。