[予約] C ++二次元ダイナミックアレイのmemset()関数の初期化

出典:https://blog.csdn.net/longhopefor/article/details/20994919

私たちはmemsetの機能についてお話しましょう:

void *型のmemset(void *型の、 int型のC、size_tのN)
アクション:sのメモリ空間は、値にCを第1のnバイトの値をオープンしました。

含蓄のmemset()は:メモリ部は、一般的にストリングの定義に使用される文字、すべての「または」/ 0「に初期化さを設定するために使用されている;例:char型[100];(memsetを、 '/ 0' はsizeof(a)参照)。

memsetの()関数は、メモリ空間を初期化するために使用されます。例えば:
CHAR STR [100];
のmemset(STR、0、はsizeof(STR))。

 

私たちは、動的割り当てと1次元配列の初期化についてお話しましょう:

次のように動的に、一次元アレイ、簡単な初期化及び離脱を割り当て。

動的割り当て:int型*配列=新しいint型[10]; //動的割り当てスペース10

初始化:のmemset(アレイ、0、はsizeof(配列))。或者のmemset(アレイ、0,10 *はsizeof(INT))。

アンドゥ:[]アレイを削除します。

 

ここでは、二次元配列について話をします:

新しい動的割り当てを使用して二次元アレイは、(N行m列)n個のm進動的に割り当てられた配列に、実際に同等であるが、我々は盲目的に動的割り当て方法の一次元アレイ操作に応じてすることができません。MSVCはとてもユーザーフレンドリーな、コンクリートが行う必要がありますされていません。

int型**配列。
配列=新しいINT * [10]。
以下のために(; iは10 <I ++ iは= 0 INT)
         配列[i]は=新しいINTを[5]。


   以上の動作は10行5列の二次元配列アレイを完了[10] [5]動的割り当ては、我々はユニット10 **アレイに第動的に割り当てられた最初のアドレスポインタ配列ポインタを見ることができ、動的およびそのトラバースのそれぞれの先頭アドレスに、動的パーティション割り当てユニット5の完全配列一方、及び第1アドレス*配列に[i]は、したがって、最終的に二次元配列アレイを完了[10] [5]の割り当て。ように、我々は3次元の動的割り当て方法の配列だけでなく、多次元を得ることができます。

二次元配列の初期化:1次元配列の初期化は適用されません動的割り当ての2次元配列に上書きコピーする方法を見つけるれます。最良の方法は、動的に、memsetの2次元配列を割り当てられ、組み合わせ、新しいAれるだけなので、一次元配列*配列に基づいて行動することができます上記の説明のmemsetからわかるように。具体的な文言は次のよう:

int型**配列。
配列=新しいINT * [10]。
以下のために(; iは10 <; I = 0 int型私は++)

{
         配列[I] =新しいINT [5]。

        memset(配列[i]は、0.5 *はsizeof(INT))。

}

 

失効の二次元配列:


{(; iが10 <I ++はiが0 = INT)のために

     []削除配列[i]は、

    配列[i]は= NULL; //は忘れないでください、P [i]は自動的にNULL値の後にスペースを解放するために指していない、より多くの何も、ちょうどそれのメモリを解放し、同じ場所に保管しないでしょう。

}

[]アレイを削除します。

アレイ= NULL;


 

最後に、説明珍しい分布:
[4] [4] INT(* P)=新しい新しいINT [3]。


説明:いくつかの初心者は、それはあなたのアイデアが間違っていることを、動的にすることができ、これは望ましいことだと思うが、また新たな流通のアレイの使用も、その分布はのconstの最も外側の層の支持持っている必要があります
int型のx = 3を、 4 = Y;
INT(* P)[Y]新しい新しいINT [X] [Y]を=; //エラー、YはCONSTでなければなりません。
だから、このように二次元配列、半自動配布の唯一同等の動的割り当ての真の目的を達成することはできません。


最終リマインダー:int型を持っていない* P =新しいint型[4] [2];などのミスの書き込み。

 

おすすめ

転載: www.cnblogs.com/jiading/p/11101541.html