1

我是菜鸟,所以我会简短地说。以下是否合法(C99)?我不想一次存储多个数组。我可以制作一个具有最大所需长度的数组并只使用它的一部分,但我宁愿这样做。

int main(){
  double drm[15000];
  //do some stuff
  double drm[14000];  
  //do some other stuff
}
4

3 回答 3

1

不,你不能那样做。它们需要位于不同的块中。你可以这样做:

int main(void)
{
  {
    double drm[15000];
    // do some stuff
  }
  {
    double drm[14000];
    // do some other stuff
  }
}

但是为什么不直接调用一个函数呢?即使您将它们放在不同的块中,您也无法真正保证编译器将对存储执行什么操作。

于 2012-04-04T18:22:04.153 回答
0

由于数组与 C 中的指针密切相关,因此您也可以使用动态数组。首先,分配一个包含 15 000 个元素的新双精度数组。当您不再需要它时,将其删除。然后创建一个包含 14 000 个元素的新数组。

使用数组后不要忘记释放堆。人们往往会忘记这一点。此外,您应该检查分配是否成功。

int main(void)
{
    double *drm = 0;
    drm = (double*)malloc(15000 * sizeof(double));
    // do something
    free(drm);
    drm = (double*)malloc(14000 * sizeof(double));
    // do some other stuff
    free(drm); // don't forget me
}

但是,我同意 Carl Norum 的观点:改用函数。

于 2012-04-04T18:27:31.483 回答
0

您可以使用mallocand free(或者realloc如果您不介意保留数据):

#include <stdlib.h>
int main(void)
{
      double *drm = (double *)malloc(sizeof(double)*15000);
      //do stuff
      free(drm);
      drm = (double *)malloc(sizeof(double)*14000);
      //do other stuff
      free(drm);
}
于 2012-04-04T18:29:24.247 回答