Я пишу программу, чтобы получить все простые числа до числа n (ввод).
Теперь в этой программе я использовал статическое распределение памяти int arr[n+1]
, однако мой компилятор не знаетзначение n во время компиляции (n
предоставляется пользователем как ввод) и, следовательно, не знает, сколько места должно быть выделено.
Следует ли использовать динамическое выделение памяти в этой программе?
int *arr=new int[n+1]
Однако в обоих случаях программа работает отлично.
Я просто хотел узнать, почему моя программаработает нормально в случае статического выделения памяти, хотя n
неизвестно во время компиляции и компилятор не знает, сколько памяти должно быть выделено.
void prime(int n) {
int arr[n + 1]; // <=======
for (int i = 0; i < n + 1; i++) {
arr[i] = 1;
}
for (int i = 2; i <= n; i++) {
for (int j = 2 * i, l = 0; j < n + 1; j = (2 + l) * i, l++) {
arr[j] = 0;
}
}
for (int i = 2; i < n + 1; i++) {
if (arr[i] == 1) {
cout << i << " ";
}
}
}
int main() {
int n;
cin >> n;
prime(n);
}