私はノブですので、これを短くします。以下の法律(C99)はありますか?私は一度に1つ以上の配列を格納する必要はありません。私は最大限必要な長さの配列を作り、その一部だけを使うことができましたが、私はむしろこれをやりたいと思います。配列を2回宣言する(C99)
int main(){
double drm[15000];
//do some stuff
double drm[14000];
//do some other stuff
}
私はノブですので、これを短くします。以下の法律(C99)はありますか?私は一度に1つ以上の配列を格納する必要はありません。私は最大限必要な長さの配列を作り、その一部だけを使うことができましたが、私はむしろこれをやりたいと思います。配列を2回宣言する(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
}
}
しかし、なぜ機能を呼び出すだけではありませんか?異なるブロックに置いても、コンパイラーがストレージに対して何を実行するのかは実際には保証されません。
配列は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と同意します。代わりに関数を使用してください。
投稿は 'C++ 'ではなく' C99'とタグ付けされています。 'malloc()'と 'free()'を使うようにあなたの例を更新してください。 – tomlogic
C99に 'new'が追加されたのはいつですか? – KevinDTimm
申し訳ありませんが、おそらく私はこれらの2つの言語を混ぜました。私は後でそれを修正します。 –
(あなたがデータを保持し気にしない場合やrealloc
)あなたはmalloc
とfree
を使用することができます。
#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);
}
malloc()の結果をキャストしないでください。 – KevinDTimm
@KevinDTimmなぜですか?それには何も問題はありません。 –
@JacobAbrahams:それには何も問題はありません。 'void *'型の式は、(関数型へのポインタ型以外の)ポインタ型に暗黙的に変換される可能性があります。キャストはちょうど混乱しており、状況に応じてエラーを隠すことができます。たとえば、C90では、 '#include
ありがとう!私は最小限の例では入れませんでしたが、これは実際にfor(blah = 0; blah
user1313527
はい - 新しいブロックは '{'があり、どこでも一致する '}'がどこかで始まります。 –