キー入力のプログラムですから、文字列処理がいっぱいあります。そして、文字列処理にはポイ ンタがつきものなのですが、実際にはほとんど使われていません。より正確には、有効な使い方を 知らないようです。 281行の関数storedataに注目してみましょう。このなかで、引数に char *keybuf;があり、ポインタであると宣言しています。利用のされ方は、 *(keybuf + scount++) = KESC;のような代入だけです。ところでこれ、意味分かりますか。これは、 keybuf[ scount++ ] = KESC;と同じですが、より難しく書いていただけでした。scountは、配列(ポインタのつもりらしいが) keybufの添字なので、keybuf [ scount++ ] の部分は、まとめて1つのポインタで表せますから、 最初に char *keybufptr = keybuf;としてしまえば、代入は、 *keybufptr++ = KESC;だけで済みます。こういうのがちゃんとしたポインタの使い方なんですよね。 この関数以外にも、ポインタをちゃんと使えばC言語らしくなる部分(SetNumber, storedata, realchk)がいっぱいあります。修正前、修正後のリストを見て検討してください。 このプログラムを書いた人は、ポインタのことをほとんど理解していないようです。配列しか使 いこなせない感じです。今までいろいろなプログラマ(日本の上位何番かに入るような連中から、 ぐーんと下まで)を見てきましたが、その経験からいって、世間の自称Cプログラマの約8割以上 が、ポインタを理解していないようです。ポインタがちゃんと理解できると中級レベルといえるで しょう。例えば、次の問題がすらすらと説明できれば中級ですね。
●C言語中級レベル認定問題●関数へのポインタの配列とはどういうもので、どういう使い方があるでしょうか。 K&Rの「プログラミング言語C」の演習問題くらいは全問解けるように努力してください。そ のくらいもできないくせに、Cプログラマというのはよして欲しいものです。世の中のレベルが大 したことないということは、たとえあなたが初心者で今はどうしようもないプログラムを書いてい ても、1年以内にC言語の中級プログラマになり、平均レベルより高くなることは、努力次第で 可能性は充分にあります。
|