C言語超入門(?)第四回

前回の復習と今回の概要

  1. 関数を使うために必要な部分だけを書いたものを「宣言」という。
  2. 書かなくても作られている関数を「組み込み関数」という。使うには「宣言」だけは必要。
  3. 組み込み関数のように「誰かが作った関数」は多くの場合「宣言」をまとめた「ヘッダファイル」がある。
  4. ヘッダファイルを使うには#include <ヘッダファイル名>と書く。
  5. 文字列は"で囲んだもの。文字と違って複数の文字が書ける。
  6. putcharとputsはそれぞれ文字と文字列を出力する組み込み関数。

こんなところかな?そして今回はこんなことを説明。

  1. 変数の定義。変数は「値をしまう場所」。
  2. 分岐の書き方。条件に合う場合はこっち、そうでなければあっち、という分け方ができる。

今回は・・・数字でも画面に出してみるかな。
ただしputcharを使って*1

変数の定義

変数の定義とは、端的に言えば、「値を置く場所を作る」こと。
しかし、「場所」があっても、その「場所」を指示する方法がないといけない。
どこかで見た書き方?それはまあ、ある程度意識して書いてますから。
変数の定義は、次のようになる。

型 名前

この定義もやはり;(セミコロン)で終わる。
つまり、書き方としてint i;、char c;など。


書き方が関数の引数に似ている?
それは、(目的以外は)同じものだからである*2
したがって、今回話す内容は、ほぼ全体にわたり引数についても利用できる。


変数の宣言は、「場所」を作って、その「場所」を指しているだけなので、その「場所」に何があるかということは何も言っていない。
だから、その「場所」に「値」を置くこと、そしてその「場所」にある「値」をとってくる(使う)こと、の二つができる。
・・・というか、できないとあまり意味がない。


なお、変数が「場所」を指す、という説明をした*3が、説明が非常に面倒くさいので、「場所」という表現は使わず、変数とだけ言う。
変数の値、といった場合は「変数の指している場所にある値」と考えてほしい。

変数の使用

こちらは至って簡単なので、先んじて書こうと思う。
変数の値を利用するには、「利用したい場所」に変数の名前を書けばいい。
例えば、x+1と書けば、(変数xが何かわかるならば)変数xの中身に1が足される。
・・・それだけ?と聞かれそうだが、それだけ、である。
引数の時と全く同じ。
なのでさらっと次へいこう。
今度は、変数の値を変更すること――「代入」を説明する。
変数の値を変更、と言うのをもう少し「場所」を使って正確に説明すると、「元々あった値を捨てて、代わりに指定された値を置く」というものである。

変数への代入

C言語での変数への「代入」は、次のように書く。

変数名 = 式

ちなみに、これまた立派な命令なので、セミコロンを最後につける。
これは、「式」が計算されて*4、その結果を変数の値とする、という内容。
例えば、x = 1 + 2;と書くと、変数xには1 + 2の結果である3が「代入」される。なので、この命令以降で変数xの値を使おうとすると3になる。


なお、C言語には変則的(変態的?)な記述がいくつかあるのだが、ここでは特に説明しないことにする。
一応「超入門」と銘打っている以上、混乱を招くものは排除しないと。

目的の関数を・・・

書くとまた倍くらい書かないといけないので、次回に回そう。
少しは細かくしたほうがいいだろうし。

補足

最初に述べたとおり、今回書いたことは基本的に関数の引数に対しても適用できる。
なので、引数にxという名前がつけられているとき、xに代入することもできる。
変数と引数は、見た目も、使い方も変わらない。

まとめ

今回やったことは、変数のお話。

  1. 変数とは、値を置く場所(を指す名前)のこと。
  2. 変数の名前は、その(指す場所にある)値と置き換えられる。
  3. 変数の(指す場所にある)値は、「代入」という操作で書き換えられる。
  4. 「代入」は「変数名 = 入れたいもの」で書ける。

この命令が終わった時点だと、変数xの値は3だね、などと考えることができる。

次回予告

今回までに使った内容で、最初に言った関数を作る。
最初に言った関数とは、putchar関数を使って、int(整数)の値を画面に表示する関数である。
まともにプログラムが出てくるので、読むのが面倒かもしれない。
が、このくらいは簡単、というプログラム・・・のはず。
・・・多分、ね。

*1:前回少し出したprintf関数を使えばあっさり画面に出せるのだが、あえて面倒なことをしよう。

*2:変数は基本的に「上書き」することを目的とし、引数は「扱う名前」の定義そのものを目的としているので、明確に異なる。

*3:もっとコンピュータに近い視点では正しいが、C言語のレベルでは別に場所である必然性もない。

*4:いたって普通の足し算や掛け算を思い浮かべれば十分。