【发布时间】:2016-02-11 08:47:18
【问题描述】:
有什么区别
void AllocateArray(int **arr,int size)
和:
void AllocateArray(int *arr,int size)
两者都只能分配一维数组,有什么区别?
【问题讨论】:
-
你是什么意思“我必须同时使用两者来分配一维数组”?
标签: c++ arrays pointers pointer-to-pointer
有什么区别
void AllocateArray(int **arr,int size)
和:
void AllocateArray(int *arr,int size)
两者都只能分配一维数组,有什么区别?
【问题讨论】:
标签: c++ arrays pointers pointer-to-pointer
我想用法应该是:
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 **) 分配一维数组
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,但由于这是一个基本问题,我不需要为 OP 深入研究这些细节。
最后说明:
请使用std::vector 代替所有这些指针。你会很平静,会感到被爱。
【讨论】: