什么是“不同之处”?
void AllocateArray(int **arr,int size)
并且:
void AllocateArray(int *arr,int size)
我需要使用两者之一来分配一维数组,它们有什么区别?
void AllocateArray(int **arr,int size)
并且:
void AllocateArray(int *arr,int size)
我需要使用两者之一来分配一维数组,它们有什么区别?
我认为应该这样使用:
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
)是按值传递的,这意味着即使内存在函数内部分配,它与外部变量无关。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
代替所有这些指针。您将感到安心并倍受爱戴。