C言語プログラミングに新しい人々のために、しばしばこのような状況が発生した - 「私たちはこのような問題に対処する場合、のストレージサイズを聞かせたり変更するために、ユーザーの使用してケースを使用」、そして、多くの人が頭を悩ま開始し、開始する方法がわかりません。今日、私はこの点でいくつかのソリューションを締結し、私たちは一緒に改善することができることを願っています。
動的配列:
まず、コードのセットを見てみましょう:
_CRT_SECURE_NO_DEPRECATEの#define 2の#include <stdio.hの> 3の#include <STDLIB.H>。 4ボイドは(){作成。 5 N-INT、I; 6 INT * ARR; 7 scanfの( "%のD"、およびN-)を、 図8 ARR = (INT *)はmalloc(はsizeof(INT)* N-); 。9(I = 0、I <N - 、I ++) 10 ARR [I] = I; 。11(I = 0; Iは、N- <; I ++の) 12のprintfであります( "%D \ T"、ARR [I]);
13無料(ARR)である; 14} 15 メイン16、INT(){ 17()を作成し; 18は0を返すことである 。19}
上記のコードからは、アレイのために、見ることができますARR []、入力の大きさではなく、与えられたため当初の私たちの個人的な使用がされている、主にトラブルのサイズを変更するために与えられた大きさを解決しています。
そして、ここではそうしないと、メモリがいっぱいにため、これらの事のものであろう、)編曲:オープンスペースのためのC言語の最も一般的に使用されるmalloc関数を使用することですが、スペースを開いた(解放するために覚えておく必要があります。
第二に、二次元の動的配列:
ボイド()を作成する{
int型N- = 3、M = 4;
int型** A;
A =(INT **)はmalloc(はsizeof(INT *)* N-); //は、ポインタの配列、アドレス割り当てへのポインタの配列を作成します
(; I <N-I ++はI = 0の整数)のための
A [I] =(INT *)はmalloc(はsizeof(INT)×m個); //第二次元の空間を割り当てます
{(; iがN <I ++はiが0 = INT)のため
のために(INT J = 0; J <Mであり、j ++)
[i] [j]は= iがjで+。
}
{ため(; iがn <I ++は、I = 0 INT)
のための(int型J = 0であり、j <M、J ++)
のprintf( "%Dの\ tを"、[I] [J])。
printf( "\ n")を。
}
}
メインINT(){
()を作成。
0を返します。
}
簡単に言えば、二次元アレイの考え方に従った、一次元アレイのような2次元アレイは、どこへの道へのポインタの使用さらに、確立することができる一次元アレイを模倣するために複数のデータを有しています作成されました。
次に、それは我々が最初に配列のサイズを設定するとき、このケースは解決されたときに満ちているためです。コードを見てください:
IF(I == N){
//配列が一杯であるかどうかを判断する、完全な場合は、次のように進んで
新しいスペースのために、より大きなメモリ空間を適用するための最初のステップは、旧宇宙の倍である。//
int型* newSpace =(int型*)はmalloc(はsizeof(int型) N- *)2 *);
新しい領域へのデータのコピー//第二段階
のmemcpy(Newspace、ARR、N- *はsizeof(int型));
古いメモリ空間を解放する//第三段階
(ARR)無料;
}
そして、あなたは簡単に、配列のオーバーフローの心配はありませんが、配列を使用することができる過程で発生する、とだけうまくその十分なメモリを確保する必要があります。