代わりに可変長配列を使用することができますが、動的メモリ割り当てが必要なのはなぜですか?代わりに可変長配列を使用できるのに、なぜ動的メモリ割り当てが必要なのですか?
unsigned int x,*p;
printf("Enter size:");
scanf("%d",&x);
p = (unsigned int *)malloc(x);
:また、我々は、動的メモリ割り当て機能のいずれかを使用して、実行時にメモリを割り当てることができる
unsigned int x;
printf("Enter size:");
scanf("%d",&x);
int arr[x];
:
我々は、可変長配列で実行時に動的メモリを割り当てることができ
したがって、どちらの場合でも実行時にメモリを割り当てることができます。なぜ、可変長配列を代わりに使用できるのですが、なぜ動的メモリ割り当てが必要なのですか? ダイナミックメモリ割り当て関数を配列よりも使用するとどんなメリットが得られますか?
配列を渡すための編集コード:
unsigned int *func(unsigned int *p)
{
*p=10; // any processing on array
return p; // we could return a pointer to an array
}
int main()
{
unsigned int x,*P;
printf("Enter size:");
scanf("%d",&x);
unsigned int arr[x];
p = func(arr);
}
@ Serge Ballesta - まあ、複雑です。質問は「C」とタグ付けされていませんでした。私は "C"タグだけを追加して編集しました。 "C++"ではなく、別のタグのための場所があり、イスラムは 'malloc()'を使用し、 'new'では使用しませんでした。しかし、IMHO、質問は両方の言語をカバーする答えが必要です。 – max66
@ Serge Ballesta - それはOKです;-)。あなたの答えを読む私は、イスラム教徒がダイナミックに割り当てられた記憶の有用性に疑問を抱いていた可能性が高いことを理解しています。だからあなたの答えは私のものより良いと思います。しかし、私は可変長配列が正しい標準C/C++(C99とオプションでC11を除く)でないことも彼に説明するのが適切だと考えています。リクエスト:答えを簡単に編集して、この部分を追加してもいいですか? – max66
あなたはその答えをここに残すべきだと思います。VLAは信頼できるコンセプトではなく、Cであっても私にとって素晴らしい補完物です。 –