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。