【问题标题】:Defining the size of an array during the execution in C在 C 中执行期间定义数组的大小
【发布时间】:2016-05-04 01:09:33
【问题描述】:

我想知道在执行期间是否可以在 C 中定义数组的大小。 例如,我可以这样做吗?

int n,i;
scanf("%d",&n);
int v[n];
for(i=0;i<n;i++){
 v[i] = i;
}

如果可以的话,我应该什么时候使用函数 malloc 来动态分配内存?我的意思是,如果我可以读取一个值 n 并分配一个具有 n 个位置的数组,那么在执行过程中,我为什么要使用 malloc?

【问题讨论】:

  • 如果函数返回后存储必须保持不变,则使用malloc。如果您希望以任意顺序释放存储空间,也需要它。
  • 你能提供更多细节吗?我不明白。
  • 一个函数分配内存并返回一个指向它的指针。为此,您必须使用malloc。例如,将元素添加到链表然后返回的函数。
  • 如果你的编译器支持VLAs,你可以这样做。

标签: c arrays memory memory-management


【解决方案1】:

只有当编译器支持可变长度数组时,才能使用变量来指定数组的长度。这些已添加到 C99 标准中,但现在在 C11 标准下是可选的。

【讨论】:

    【解决方案2】:

    其中一个区别是,当您在函数内声明数组时,它是在堆栈上分配的。它是该函数的局部变量,当函数返回时,它会自动释放。 malloc,在堆上分配,并返回一个指向已分配内存起始地址的指针。与堆栈上的存储不同,它不会自动释放,如果你从函数返回指针,你可以在另一个函数中使用它,直到你释放它。 这对于更多信息很有用:http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多