int a;
cin>>a;
int arr[a];

Я хочу объявить массив в соответствии с размером пользователя. Я новичок в программировании. Что можно сделать? Является ли этот метод правильным?

new learner

Ответов: 2

Ответы (2)

То, чего вы хотите добиться, называется массивом переменной длины, сокращенно VLA который не является частью стандарта C++.

Что можно сделать?

Это вызывает неопределенное поведение.

Является ли этот метод правильным?

Неа. Лучше всего воспользоваться помощью std::vector<>, который стоит здесь. Он динамически выделяет требуемые байты данных и, по желанию, вы можете инициализировать их нужными значениями.

Вы можете добиться этого следующим образом:

int n = 0;
std::cin >> n; // убедитесь, что это допустимый размер
std::vector a(n);

В случае, если вы хотите, чтобы он продолжал расти во время выполнения, просто используйте его метод push_back() и вы можете получить размер вектора через его size().

Вы обозначили это C++, в таком случае есть очень мало оправданий, чтобы не решить это с помощью std::vector.

Если вы должны сделать это в стиле C, вы можете написать:

int a;
cin >> a;
int * arr = (int *)malloc(sizeof(int) * a);

или лучше (согласно комментарию Томаса ниже):

int a;
cin >> a;
int * arr = new int[a];

но вектор определенно предпочтительнее.

2022 WebDevInsider