ログイン
kid's world

式とは何か

今までの連載では,文字や数値の扱い方を解説してきたが,「文字列」についてはまだ解説していない。そこで今回は,文字列の扱い方について解説をする。また,C言語の文法について少し復習する。


はじめに

前回は,キーボードを通して入力を受け付ける方法について解説した。また,それを理解するために必要なchar型や,文字とは何なのかということについて詳しく説明した。文字や数値をキーボードから入力できるようになったことで,プログラムの幅がかなり広がったはずである。

まだなんとなく理解が不十分なところもあると思うが,実際にいろいろなプログラムを作ってみることで理解が進む。ぜひとも実際にキーボードを打ってプログラムをたくさん作ってみていただきたい。

今回のお話

これまでに文字や数値についての扱い方については解説したが,文字の連なり,すなわち「文字列」についてはまだ解説していない。そこで今回は,文字列の扱い方について後半部分で解説をする。前半部分では,C言語の文法について少し触れたい。今まであいまいになっていた「式」と「文」の概念について,ここでしっかりと整理をする。

式とは何か

C言語には式と呼ばれる概念がある。「式」と聞くと,「関数」や「変数」のときと同じように,やはり数学の式を考えてしまうが,それとは違う。

式は,プログラム中に単独で存在することはできない。式の後ろにセミコロン「;」をつけると,文となる。

式; → 文

この文は式から作られたものなので,文法上「式文」と呼ばれている。つまり,式はその後ろにセミコロンをつけられて文となり,初めてプログラム中に存在することが許されるわけだ。

一次式

答えを後回しにしてしまって申しわけない。そもそも,式とは何なのか。C言語にはいろいろな式があるのだが,いちばん身近な式は一次式である。一次式とは,識別子,定数,文字列,カッコで囲まれた式のことである。

簡単にいってしまえば,それは「10」という数値や「i」などの変数のことだ。よって,不気味に思われるかもしれないが,

10;

や,

i;

は,まったく文法上正しい「式文」である。「うそだ!」と思ったら実際にやってみよう。List 1のプログラムは,正常にコンパイルでき{{fn('場合によっては,無意味な式だと警告を受ける場合があるかもしれない。しかし文法上誤りではないので,実行ファイルは正しく生成される。')}},正常に実行される。誤っているのは,無意味なプログラムを作らせようとしている筆者の性格だけである。

List 1: 無意味な式文の例

main()
{
  int i;

  i;
  10;
}

もちろんこのプログラムを実行しても何も起こらない。うんともすんともいわずに直ちに終了する。

演算子と式

これまで「文」は何らかの処理をするものだと思い込んできたのだが,ここでその考えは覆されてしまった。「文は必ずしも処理を行うわけではない」らしい。

では,本質的にコンピュータに処理をさせているのは何だろうか。……それは「演算子」である。

これまでに,算術演算子,代入演算子,インクリメント演算子など,「演算子」という名のつくものがたくさん出てきた。実は,コンピュータに何らかの処理をさせているのは,それら演算子なのだ(演算をしない演算子も中にはあるが……)。たとえば次の文を見てみよう。

i = 10;

これは見てのとおり,代入演算子「=」を使い,変数iに10という数値を代入する文だ。代入演算子は,左辺に「左辺値」をとり右辺に「式」をとる。左辺値という新しい言葉が出てきたが,int型やfloat型などの変数のことだと考えればよいだろう。

実は,代入演算子でつながったひとかたまり,つまり,

左辺値 = 式

は,「代入式」と呼ばれる立派な1つの式である。式は,後ろにセミコロンがつくと文になる。したがって,これは文である。

左辺値 = 式;

そう,「i =10;」という代入文は「式;」という形,すなわち式文としてプログラム上に存在していたわけだ。

変数に値を代入するときは,このような文として覚えてしまってもかまわないが,厳密にはこのようにしてプログラム上に存在しているんだということを頭の片隅に置いておくと,ちょっと得した気分になるかもしれない(ならなかったらすみません)。

これで,実際に処理を行っているのは演算子だということがわかっただろう。

余談だが,式文においては,式は省略可能である。すなわち,セミコロン「;」だけの式文を作ることができる。そのような例は後ほど説明する制御文においてときどき見られるので,この事実も頭の片隅に置いておいていただきたい。

代入式の値

「左辺値=式」は,式である。この事実を利用すれば,次のような文もC言語の文法に合致した文であるということがいえる。

i = j = 10;

かなりへんてこな文だ。しかし「j =10」は代入式という立派な式だ。よって,

i = 式;

ということになり,代入式の文法に合致していることになる。

ところで,変数iにはどんな値が代入されたのだろうか。実際にコンパイルして,実行して確認してみよう(List 2)。

List 2: 代入式の例

#include <stdio.h>

main()
{
  int i,j;
  i = j = 10;
  printf("%d %d\n", i,j);
}

実行結果は「10 10」となる。したがって,「j =10」という「式」は,10という値を持った式であった,という推測が成り立つ。実際そのとおりである。代入式の値は,左辺値の値となるのだ。


演算子の決まりごと」へ進む

広告


©Toshio Koide 1996-2007.

目次

リンクについて

リンクは御自由にどうぞ。

メール

mail.gif

広告