C中的静态和动态数组有什么区别?

可能重复:
数组名是C中的指针吗?
C ++静态数组与动态数组?

我正在学习C而且我对以下两个数组之间的区别感到困惑:

int a[10]; 

 int *b = (int *) malloc(10 * sizeof(int)); 

就最基本的水平而言,这两者有什么区别?

 int a[10]; 

在堆栈上分配,并在范围结束后解除分配。

 int *b = (int *) malloc(10 * sizeof(int)); 

在堆上分配,并且在程序的整个生命周期中都是活动的,除非它明确地自由 d。

离开当前堆栈帧后,静态数组将被销毁(基本上,当您返回的函数返回时)。 动态arrays永远存在,直到你释放()它。

第一个生活在堆栈上(=生活与变量的范围一样长),第二个生活在堆上(=生活直到释放)。 第一个具有固定大小,而第二个可以重新resize。