私は初心者なので、これを短くします。次は合法ですか(C99)?一度に複数の配列を格納したくありません。必要な最大の長さの配列を作成し、その一部のみを使用することもできますが、これを実行したいと思います。
int main(){
double drm[15000];
//do some stuff
double drm[14000];
//do some other stuff
}
いいえ、できません。それらは異なるブロックにある必要があります。あなたがすることができます:
int main(void)
{
{
double drm[15000];
// do some stuff
}
{
double drm[14000];
// do some other stuff
}
}
しかし、なぜ関数を呼び出さないのでしょうか? それらを異なるブロックに配置したとしても、コンパイラーがストレージに対して何をするかについて、実際には何の保証もありません。
malloc
andを使用できます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);
}
配列は 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 に同意します。代わりに関数を使用してください。