Назначение значений всем элементам динамически размещаемого массива указателей? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть массив указателей (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 голосов
/ 20 ноября 2018

У вас есть массив int, а не массив указателей.Вы можете создать массив указателей, используя

int **ptrArr1 = new int*[2];

, а затем назначить указатели для каждого указателя в массиве:

ptrArr1[0] = &one;
ptrArr1[1] = &two;
0 голосов
/ 20 ноября 2018

Существует разница между массивом целых чисел и массивом указателей на 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;

Для шага упрощения вы должны взглянуть на Что такое распадающийся массив?

...