malloc() 和固定大小的简单声明之间的区别

Difference between malloc() and simple declaration in fixed sizes

假设我想为 x doublex 的数组获取 space一个整数。

谁能给我解释一下

之间的区别
double myArray[x];

malloc(x*sizeof(double));

除了 malloc() returns 一个 void 指针 ?

提前感谢您的回答。

double myArray[x];这里是内存

  1. 在堆栈上声明
  2. 在编译时声明,因此更快
  3. 只能在声明函数的范围内访问,(如果在全局范围内声明则全局访问)
  4. 如果声明函数 returns
  5. 将被释放
  6. 一般在编译时已知数组大小时使用

myArray = malloc(x*sizeof(double));这里是内存

  1. 在堆上声明(可变长度数组 (C99) 除外,如 Malina 所指,在堆栈上分配,阅读更多内容 here
  2. 在 运行 时宣布,因此速度较慢
  3. 只要可以访问 myArray 变量就可以访问
  4. 调用free(myArray)或程序退出时释放
  5. 通常在编译时数组大小未知的情况下使用