#c #dynamic-arrays
#c #динамические массивы
Вопрос:
Как я могу динамически инициализировать ptr с помощью new:
int values1[4][2] = {{2,3},{-4,0},{3,-7},{2,2}};
int values2[4][2] = {{1,1},{-2,-3},{4,12},{-5,25}};
int (*ptr[2])[4][2] = {amp;values1,amp;values2};
Я попробовал следующее, но я получаю ошибку:
int *ptr = new int[2*4*2]{amp;values1,amp;values2};
Комментарии:
1. Если у вас нет очень веской причины не делать этого, вы должны использовать для этого контейнеры, а не массивы в стиле c: en.cppreference.com/w/cpp/container
2. Я пытаюсь использовать динамический массив…
3. Динамический массив: std::vector
4. Я тоже не могу использовать vector
5. Почему? Вы изучаете C или C ?
Ответ №1:
Typedef может помочь с таким сложным кодом
int values1[4][2] = { { 2, 3 }, { -4, 0 }, { 3, -7 }, { 2, 2 } };
int values2[4][2] = { { 1, 1 }, { -2, -3 }, { 4, 12 }, { -5, 25 } };
typedef int(*xxx)[2];
int main()
{
xxx* ptr = new xxx[2];
ptr[0] = values1;
ptr[1] = values2;
return 0;
}
Я, честно говоря, понятия не имею, как бы вы написали это без xxx
typedef
Редактировать
Похоже, это правильная версия без typedef
int(**ptr)[2] = new (int(*[2])[2]);
Я не совсем уверен, что верю в это.
Комментарии:
1. Спасибо, хотя я пытаюсь использовать новые
2. @Melissa См. Редактирование. Я работаю над версией без typedef.
Ответ №2:
Учитывая все сказанное о контейнерах, вы можете сделать это:
int (*ptr)[4][2];
ptr = new int[2][4][2]{{{2,3},{-4,0},{3,-7},{2,2}},{{1,1},{-2,-3},{4,12},{-5,25}}};
Комментарии:
1. Спасибо! Хотя, как я могу вызвать values1 и values2 вместо записи всех значений в {}?
ptr = new int[2][4][2]{amp;values1,amp;values2}
не работает2. Также является ли это динамическим массивом?
3. Вы не можете написать это так, потому что {} здесь творит волшебство 🙂
4. о, хорошо, есть ли другой способ, которым я мог бы инициализировать с помощью new без перезаписи значений?
5. Динамический в том смысле, что он динамически распределяется. Не динамический в том смысле, что он не будет расширяться при добавлении новых значений.