November 2012

November 30, 2012

複雑過ぎるプログラムにありがちなこと

不必要に複雑なプログラムは、データ構造の選択を間違ってる、っていうパターンが多い。
今扱っているJavaプログラム、MapやSetを全く使っていないんだよね。
殆どすべての処理を配列とListを使ってやってるんだけど、ループを回しながら、old○○やらnextFlagやら怪しい変数で訳のわからん状態管理をしたり、配列のインデックス毎に意味を持たせてみたり、非常にカオスになっている。

フラグやらif文やらどんどん追加する前に、ロジックが単純になるデータ構造をまず考える、これ大事だね。

誰か偉い人も言ってたはず。人月の神話だったか。

matssaku at 17:07|PermalinkComments(0)TrackBack(0)clip!雑記 

November 19, 2012

配列とポインタは違うんだよ!

配列名はポインタとして扱われる◯
配列とポインタで共通の表記が使える◯
配列とポインタは同じ☓

同じように見えるだけで、配列とポインタは違います!

違うところ
・配列では、要素数分のメモリ領域が確保されている
sizeof array //配列の型のサイズ*要素数
sizeof ptr     //ポインタ変数のサイズ

・配列は固定された変数
 ・配列にポインタは代入できない
 array = ptr; //コンパイルエラー

 ・配列名が指すアドレスは変更できない
 array++; //コンパイルエラー

ちなみに、関数の引数として配列を指定した場合、実際に渡されるのは配列の先頭を示すポインタになります。
仮引数が配列型で宣言されていても、ポインタ型で宣言されていても、渡されるのは、必ずポインタになります。

matssaku at 07:46|PermalinkComments(0)TrackBack(0)clip!C