有什么区别
void AllocateArray(int **arr,int size)
和
void AllocateArray(int *arr,int size)
我必须同时使用两者分配1D数组,有什么区别?
答案 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
代替所有这些指针。你会平静下来并感受到爱。