重複の可能性:
配列名は C のポインターですか?
C++静的配列と動的配列?
私は C を学んでいますが、次の 2 つの配列の違いについて混乱しています。
int a[10];
と
int *b = (int *) malloc(10 * sizeof(int));
最も基本的なレベルで、これら 2 つの違いは何ですか?
重複の可能性:
配列名は C のポインターですか?
C++静的配列と動的配列?
私は C を学んでいますが、次の 2 つの配列の違いについて混乱しています。
int a[10];
と
int *b = (int *) malloc(10 * sizeof(int));
最も基本的なレベルで、これら 2 つの違いは何ですか?
int a[10];
スタックに割り当てられ、スコープが終了するとすぐに割り当てが解除されます。
int *b = (int *) malloc(10 * sizeof(int));
ヒープに割り当てられ、明示的に解放されない限り、プログラムの存続期間中存続します。
静的配列は、現在のスタック フレームを離れるとすぐに破棄されます (基本的に、現在の関数が戻ったとき)。動的配列は、free() するまで永久に残ります。
1 つ目はスタック上に存在し (= 変数のスコープが続く限り存在します)、2 つ目はヒープ上に存在します (= 解放されるまで存在します)。1 つ目は固定サイズですが、2 つ目はサイズを変更できます。