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

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 に答える
0

配列は C のポインタと強く関連しているため、動的配列も扱うことができます。最初に、15,000 要素の新しい double 配列を割り当てます。不要になったら削除してください。次に、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 に答える