为动态分配的指针数组的所有元素分配值?

时间:2018-11-20 07:55:11

标签: c++ arrays pointers dynamic-memory-allocation

我有一个包含两个元素的指针数组(ptrArr1)。我希望指针数组是动态分配的。我可以为指针数组的第一个元素分配一个地址,但是我不知道如何为指针数组的第二个元素分配一个地址。我不希望使用任何STL或其他预编码的函数。我正在执行此练习,以增强对指针的理解。谢谢。

int main()
{
    int one = 1;
    int two = 2;
    int *ptrArr1 = new int[2];
    ptrArr1 = &one;
    ptrArr1[1] = &two;  //does not work
    ptrArr1 + 1 = &two; // does not work


    delete[]ptrArr1;
    return 0;

}

2 个答案:

答案 0 :(得分:5)

整数数组和指向int的指针数组之间存在差异。在您的情况下,ptrArr1是一个指向整数数组的指针,其中两个整数之间有空格。因此,您只能将int分配给ptrArr1[1] = 2,而不能分配地址。比较

int xs[] = { 1, 2, 3 };    // an array of integers

int y0 = 42;
int *ys[] = { &y0, &y0 };  // an array of pointers to integers

现在您还可以拥有指向xs的第一个元素的指针。 ys

int *ptr_xs = &xs[0];
int **ptr_ys = &ys[0];

// which can be simplified to:
int *ptr_xs = xs;
int **ptr_ys = ys;

为简化步骤,您应该查看What is array decaying?

答案 1 :(得分:3)

您有一个int数组,而不是一个指针数组。您可以使用

创建一个指针数组
int **ptrArr1 = new int*[2];

,然后将指针分配给数组中的每个指针:

ptrArr1[0] = &one;
ptrArr1[1] = &two;