2016-05-04 13 views
-1

実行中にCで配列のサイズを定義できるかどうかを知りたいと思います。 たとえば、これを行うことはできますか?C言語での実行中に配列のサイズを定義する

int n,i; 
scanf("%d",&n); 
int v[n]; 
for(i=0;i<n;i++){ 
v[i] = i; 
} 

これが可能であれば、メモリの動的割り当てにはいつmalloc関数を使用する必要がありますか?つまり、値nを読み込み、n個の位置を持つ配列を割り当てると、実行中にmallocを使うべきですか?

+0

関数が復帰した後も記憶域を維持する必要がある場合は、 'malloc'を使用します。任意の順序でストレージを解放したい場合にも必要です。 –

+0

詳細をお知らせください。理解できませんでした。 – Zaratruta

+0

関数はメモリを割り当て、ポインタを返します。そのためには 'malloc'を使う必要があります。たとえば、リンクされたリストに要素を追加してから返す関数です。 –

答えて

3

コンパイラが可変長配列をサポートしている場合のみ、変数を使用して配列の長さを指定できます。これらはC99標準に追加されましたが、C11標準ではオプションです。

2

1つの違いは、関数内で配列を宣言すると、スタックに割り当てられる点です。その関数のローカルなので、関数が戻ると、自動的に割り当てが解除されます。 mallocは、ヒープに割り当て、割り当てられたメモリの開始アドレスへのポインタを返します。スタック上のストレージとは異なり、自動的に割り当てが解除されるわけではありません。ポインタを関数から戻すと、解放するまで別の関数でポインタを使用できます。 これはより多くの情報に役立ちます:http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/

関連する問題