「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで
●配列とポインタの使い分け
配列の実体はポインタであると言いました.したがって,プログラムを書く際に,配列を使ってもポインタを使っても原理的には同じです.現実にはプログラムの読みやすさや拡張性,あるいは効率面から両者を使い分けます.例えば,Cコンパイラに依存しますが,配列を使うかポインタを使うかによってCコンパイラが生成するコードに効率面の違いが出る場合があります.つまり,
int array[10], n; for(n=0; n<10; ++n) { array[n] = 0; }
と
int array[10], n, *p; for(n=0, p=array; n<10; ++n) { *p++ = 0; }
とで性能が異なる場合があります.興味のある方は,Cコンパイラにアセンブリ・ソースを出力するオプションを付けて,比較してみるとおもしろいですよ.
●格言:配列のインデックスには悪魔が潜む
配列の実体,つまり配列とポインタの関係を理解しておくことは,組み込みソフトウェアの場合きわめて重要です.また,負のインデックスの場合も含めて,配列の領域を超えた場所のデータをアクセスすることで発生するバグは意外と多いものです.