Я уже пытался определить размер массива с помощью переменной в C ++, и, хотя я не полностью понимаю концепцию динамической памяти, я заставил ее работать. Однако я не знаю, как сделать то же самое с «точкой» массива в этом случае.
num=50;
struct pos
{
double x;
};
struct pos point[num];
Есть ли что-то очевидное, что я пропускаю?
Эти типы размеров массивов должны быть постоянными времени компиляции, чтобы компилятор знал, сколько памяти резервировать.
int count = 50;
int arr[count] // error!
static const int count = 50;
int arr[count]; // OK!
Другой вариант — это динамически выделяемая память, размер которой известен во время выполнения.
int count = 50;
int* arr = new int[count];
delete [] arr;
Однако, как правило, вы не хотите иметь дело с необработанными указателями и выделением памяти самостоятельно, а вместо этого должны предпочесть:
#include <vector>
int count = 50;
std::vector<int> arr(count);
Это также будет работать для любых пользовательских типов, которые вы предоставили, если они копируемые (подсказка: ваш пример pos
структура копируемая):
#include <vector>
int count = 50;
std::vector<pos> arr(count);
arr[0].x = 1;
// ... etc
arr[49].x = 49;
std::vector
имеет богатый интерфейс и все детали можно найти здесь
Других решений пока нет …