Какое значение получает указатель на указатель, когда он указывает на динамически выделенную память?

Рассмотрим следующий случай:

int **my_array = new int*[10];
  1. Что мы назначаем my_array здесь?
  2. my_array указатель на что указывает?
  3. Есть ли способ перебрать my_array (указатель) и установить двумерный массив целых чисел (а не int *)?

1

Решение

Мы назначаем my_array адрес массива. Массив содержит указатели, которые могут указывать на другие массивы, но пока нет.

Да, мы можем сделать это:

int **my_array = new int*[10];

for(int i=0; i<10; ++i)
my_array[i] = new int[13];

my_array[2][11] = 500;
3

Другие решения

Что мы назначаем my_array Вот?

Вы можете назначить int* к элементам my_array, Например.

my_array[0] = new int[20];

или же

int i;
my_array[0] = &i;

my_array указатель на что указывает?

Это указывает на массив из 10 int* объекты.

Есть ли способ перебрать my_array (указатель) и установить двумерный массив целых чисел (а не int *)?

Не уверен, что вы ожидаете увидеть здесь. Элемент my_array может быть только int*,

Если ты хочешь my_array чтобы быть указателем на двумерный массив, вы можете использовать:

int (*my_array)[20] = new int[10][20];

Теперь вы можете использовать my_array[0][0] через my_array[9][19],

PS Если это ваша попытка понять указатели и массивы, это все хорошо. Если вы пытаетесь развернуть этот код в работающей программе, больше не используйте сырые массивы. использование std::vector или же std::array.

Для одномерного массива используйте:

// A 1D array with 10 elements.
std::vector<int> arr1(10);

Для 2D-массива используйте:

// A 2D array with 10x20 elements.
std::vector<std::vector<int>> arr2(10, std::vector<int>(20));
1

По вопросам рекламы [email protected]