const 修飾子

C言語では、変更できない型を用意する時にconst修飾子が使われます。
これを使った変数は、変数の初期化(仮引数の設定を含む)時だけ設定でき、 あとは変更できないものとなります。
const修飾子を使う目的は、 コンパイラによる最適化を促進するためと、 プログラムの意味をより明確にすることです。
例えば変数で、変更予定がないけれど、コードの中の複数箇所で使いたい値を使う場合 、#define で値を識別子へ定義する方法がありますが、この代わりに使うケースがあります。

  const double g = 9.8; /* 重力加速度 */
このような記述以降で、gを利用したプログラムを考えてみましょう。
この後のタイプミスなどなどで、gを変更する記述があると、 コンパイラがエラーを指摘してくれます。 よって間違って変更してしまうミスを減らすことができます。

また、関数定義などのポインタ引数宣言で、 ポインタが指し示す記憶領域を変更しない指定などに使われます。
例えば文字列byte数を返す関数strelnの正確な宣言は次のようになっています。
 size_t strlen(const char *s);
この関数を作る側では、s[0] = '\0' のようにポインタの指し示す領域を 変更する記述でエラーになります。(変更せずに利用するだけならエラーになりません)
逆にこの関数を利用する立場からこの宣言を読む場合、 この関数の実行で実引数のポインタsが指し示す記憶域に変更がない関数として 利用できることになります。