【问题标题】:In C what is the difference between a normal array and an array created with malloc? [duplicate]在 C 中,普通数组和使用 malloc 创建的数组有什么区别? [复制]
【发布时间】:2014-06-27 06:54:39
【问题描述】:

假设我通过这样做声明了一个数组:

int array[] = {1, 2, 3, 4};

据我了解,您也可以使用指针和 malloc 创建相同的数组:

int* array = malloc(sizeof(int) * 4);  
*(array) = 1;
*(array + 1) = 2;
*(array + 2) = 3;
*(array + 3) = 4;

这两种方式有什么区别?一个一定比另一个更好吗?

【问题讨论】:

  • 编译时大小未知怎么办?
  • 如果 SO 重复搜索不是那么糟糕,我会为你找到 10 个。
  • 这应该在您最初听说动态内存分配的来源中进行解释。

标签: c arrays pointers


【解决方案1】:

第一个驻留在当前函数的调用堆栈中。第二个驻留在堆中。

第一个在函数返回时超出范围,第二个一直持续到在地址上调用free()

更多差异,但我遵从 lethal-guitar 找到的重复项,而不是添加到我的答案中。

【讨论】:

  • 好吧,我其实以为数组的数据是存放在堆里的。这清除了很多事情。谢谢。
  • 主要区别在于动态内存是...动态的。
  • 是的,我对数组数据的存储有这种误解。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2019-06-01
  • 2019-05-24
  • 2012-09-14
  • 2017-09-08
相关资源
最近更新 更多