数组的动态、静态分配到底什么区别?

#define MAXSIZE 100
int *p;
int a[MAXSIZE];

//下面这两条语句到底有什么区别?不都是申请了MAXSIZE个空间吗?
p=new int[MAXSIZE];
p=a; 

申请的空间所在区域不一样。静态分配在栈里,动态分配在堆里。
栈空间比较小,不适合大量空间的申请。

静态数组是在编译的时候在栈上分配空间的,因此在编译时就要知道分配空间的大小
动态数组是在运行的时候在堆上分配的,因此可以在运行时再确定分配空间的大小。