C言語入門 基礎文法編
完成と次のステップ
66 レッスンで手に入れたもの
おつかれさまでした。第1章では printf を 1 行書いて動かすだけだったものが、いまは番号でメニューを選び、複数の学生を構造体配列で持ち、集計してファイルに保存できるところまで来ました。途中で足したものを並べると、変数と型、書式指定、分岐、ループ、関数、配列、文字列、ポインタ、構造体、ファイル入出力です。C の入門書で扱われる基本文法は、これでひととおり通っています。
大事なのは、機能を 1 つずつ足しながら 1 本のプログラムを育てた、という経験のほうです。文法を個別に覚えても、どこで使うかが分からなければ動くものは作れません。逆にこのやり方を知っていれば、次の言語でも同じ順序で自分を進められます。
C言語中級で扱うこと
このコースでは、ポインタを「宣言する、* で中身を読む、関数に渡して書き換える」ところまでに絞りました。ここから先は C言語中級 の範囲です。
ひとつは ポインタ演算 です。p + 1 がバイト数ではなく型 1 個分ぶん進む、という C 独特の規則で、配列とポインタが本当は同じものだったと分かる場面です。
ふたつめは 動的メモリ確保 です。malloc と free を使うと、実行中に必要な分だけメモリを借りられます。今回のプログラムは学生を最大 10 人までに固定しましたが、malloc を使えば人数を入力してから確保でき、この制限がなくなります。借りたら返すという責任が生まれるので、返し忘れの メモリリーク や、返したあとに使う ダングリングポインタ の話もここで出てきます。
みっつめは 連結リスト です。ポインタでデータどうしをつないで並べる構造で、途中への挿入や削除が配列より速くなります。木構造やハッシュ表といったデータ構造の入口でもあります。
基本情報技術者試験の科目B につながる
C の文法を通したことは、資格の勉強にもそのまま効きます。基本情報技術者試験の科目B は、擬似言語で書かれた 20 問前後のプログラムを読んで、変数の中身や出力を答える問題が中心です。使われるのは代入、分岐、繰り返し、配列、関数呼び出しという、このコースで書いてきたものばかりです。
読解問題で強いのは、実際に手を動かして書いた経験がある人です。ループを 1 回ずつ追って変数の値を紙に書き出す作業は、第4章で九九や FizzBuzz を書いたときにやったことと同じです。科目B にはトレース、つまり処理を 1 行ずつ追う力が要りますが、それはコンパイルエラーやバグを自分で直してきた過程で育っています。
次にどこへ進むか
進む先はおおよそ 3 つに分かれます。C をさらに深くやってメモリとデータ構造に踏み込むなら C言語中級です。資格で成果を形にしたいなら基本情報技術者試験の対策へ進みます。作りたいものが先にあるなら、C で理解したメモリと型の感覚を持ったまま別の言語に移るのも良い選択です。どれを選んでも、今日完成させた成績管理CLI が土台になります。