如果我想在主函数中声明一个动态大小的数组,我可以这样做:-
int m;
cin>>m;
int *arr= new int[m];
无法执行以下操作,因为编译编译器必须知道每个符号的大小,除非它是外部符号:-
int m;
cin>>m;
int arr[m];
我的问题是:
为什么编译器必须知道上述代码中 arr 的大小?它是一个未在符号表中定义的局部符号。在运行时,堆栈会处理它(与 m 相同)。是因为编译器必须确定 main() (全局符号)的大小等于其中定义的所有对象的大小吗?
如果我有一个功能:
int func(int m)
我可以在函数内部定义 int arr[m] 还是我必须这样做
int *a= new int[m]