【问题标题】:How could I allocate 1D array by using pointer to pointer (int **)如何使用指向指针的指针(int **)分配一维数组
【发布时间】:2016-02-11 08:47:18
【问题描述】:

有什么区别

void AllocateArray(int **arr,int size)

和:

void AllocateArray(int *arr,int size)

两者都只能分配一维数组,有什么区别?

【问题讨论】:

  • 你是什么意思“我必须同时使用两者来分配一维数组”?

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


【解决方案1】:

我想用法应该是:

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)是传值的,也就是说即使内存是在函数内部分配的,与外部变量无关。

【讨论】:

    【解决方案2】:

    如何使用指向指针的指针 (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 代替所有这些指针。你会很平静,会感到被爱。

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 2021-02-07
      • 2013-07-11
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多