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

时间:2012-09-22 14:51:03

标签: c arrays

  

可能重复:
  Is array name a pointer in C?
  C++ Static array vs. Dynamic array?

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

int a[10];

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

在最基本的层面上,这两者之间有什么区别?

3 个答案:

答案 0 :(得分:6)

int a[10];

在堆栈上分配,并在范围结束后立即取消分配。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

相关问题