Я новичок в программировании на C++, я узнал, что все статические переменные выделяются во время компиляции в памяти стека, поэтому их размер должен быть известен перед компиляцией компилятором.
Но динамические переменные распределяются по памяти кучи, которая очень велика, и компилятору не нужно знать размер заранее.
поэтому я попробовал статическое и динамическое объявление массивов и задал им размер во время выполнения, но программа работает нормально.
Итак, в чем разница между ними, кроме того факта, что один находится в куче? как и оба массива имеют размер только n
#include<bits/stdc++.h>
using namespace std;
main(){
int n;
cin>>n;
int arr1[n];
int *arr2 = new int[n];
for(int i=0; i<n; ++i){
arr1[i] = i;
arr2[i] = i;
}
for(int i=0; i<n; ++i){
cout<<arr1[i]<<" "<<arr2[i]<<endl;
}
}
ввод: 1000
выход:
0 0
1 1
2 2
3 3
.
.
.
.
(so on till)
999 999
int arr1[n];
на самом деле не компилируется. Добавьте-pedantic-errors
к своим параметрам компилятора, чтобы не дать GCC скомпилировать этот нестандартный код. В отличие от C, C++ не имеет VLA. - person NathanOliver   schedule 07.06.2021int arr1[n];
в любом случае не является статическим массивом в C. - person Weather Vane   schedule 07.06.2021malloc
дает вам кучу памяти - person Tim Randall   schedule 07.06.2021new
/new[]
) будет жить в куче. - person NathanOliver   schedule 07.06.2021static variables are allocated at compile time on stack memory
- person Tim Randall   schedule 07.06.2021static
переменные выделяются при запуске программы, а не из автоматического хранилища. - person user4581301   schedule 07.06.2021