C,C++分科会テキスト02
目的
演算子と変数。変数は値を格納する。値が型を持つように変数も型を持つ。
演算子は関数のようなものである。値または変数自身を受け取って何かをしでかして値または変数を返す。
目次
- 変数とは
- 変数には値を保管することができます。変数の宣言にはそれが格納する値の型が必要です。
- 代入と取り出しの仕方
- 演算子=を使って変数に値を入れることができます。
変数から値を取り出すときはあたかも変数が値であるかのように扱えばよいので簡単です。
- ほかの演算子
- 一つまたは二つの値もしくは変数から、値または変数を導く関数のようなものです。宣言は必要ありません。
- そのほか
- 型の変換など
- 関数の定義の仕方
- 関数の引数を変数として受けて値を返すこともできます。/dd>
変数は数学の変数にやや似ています。つまりx,y,zなどのように値を代入して保管しておくわけです。
数学の変数ではx=0とやったらもうxの値は0以外の何者でもなくなります。
しかし、ここでいう変数とはx=0としてつぎにxに他の値を代入するまでxの値は0だが、x=1などとして違う値を代入するとxの値が変われるということです。
さて、変数の宣言は
int hogeint;
double hogedouble;
char hogechar;
等という風に行います。もうこれで宣言がすんでいるだけでなくメモリー上のとある場所が確保されます(定義されます)。
この定義を、関数の中に書けばその関数の中のみで使えます。関数の外では使えません。その関数が終わると自動消滅します。
関数に関係が無く、いつでも使いたい場合は関数が出てくる前に関数の宣言に並んで書きましょう。
//関数の宣言 etc.
#include <stdio.h>
int main();
int count();
//グローバル変数の定義
int counter;//このプログラムで使える。
//関数の定義
int main (){
int i;//この関数mainの中でしか使えない。
/*
省略
*/
return 0;
}
場所を確保したと同時に最初に入っている値を決定する(初期化する)ためには、
int hogeint=1234;
とやればOkです。演算子を使って代入するのと同じように見えますが初期化はできるが代入ができないこともあるので気をつけましょう。
これでhogeintはint型の値を、hogedoubleはdouble型の値を、hogecharはchar型の値を何回でも入れることができるようになります。
ところで関数は値を受け取って何かしでかして値を返すと述べましたが、実際は変数自身も受け取ることができます。
変数を受け取れると、受け取った変数にちょっかいを出すことができます。
演算子も関数のようなものです。そして演算子には特に変数を受け取るものが多いのです。
まず、
すでにhogeintが定義されているとして、
hogeint=1234;
とやると、hogeintに1234という値が入ります。簡単です。
=というのは等しいという事実を示すのではなく、左の変数に右の値を入れますという意味です。
それ以外の意味はありません。
逆に値を使うときですがふつうにhogeintを値として扱ってかまいません。
hogehogeint=hogeint+10
等というように。
おや、まだ説明していない+があります。次に説明しましょう。
+は左の値と右の値を引数としてその合計を値として返す関数と考えるとわかりやすいと思われます。
-も同様左の値から右の値を引いた値を意味します。
つまり(5+3)というのは8を意味しているのです。
*も同様です。
間違えやすいのが/です。
/は左の値と右の値が小数であるときは小数を返します。そして31.0/5.0は6.2を意味します。
/は左の値と右の値が整数であるときは整数を返します。そして31/5は6を意味します。つまりいわゆる商です。
こういうときに型が大事なのです。そして31.0とやれば小数の31だし31とやれば整数の31を意味します。
これに対応して「あまり」を出す演算子があります。
31%5は1を示します。ただし、31.0%5.0はだめです。小数に対しては%が定義されてないないのです。
変数を使った演算子としては、
上で説明した=のほかに
+=,-=,*=,/=,%=等というものがあります。
+=ですが、これは左側の変数と右側の値を引数として左側の変数に右側の値を足し込みます。
つまり、左側の変数の値と右側の値の和が左側の変数に格納されるわけです。返す値はたしこんだあとの左の変数自身となっています。
int hoge=0;
//hogeの値0
hoge+=10;
//hogeの値10
hoge+=20;
//hogeの値30
hoge+=50;
//hogeの値80
という具合です。
-=,*=,/=,%=も推して知れます。
また++というのは+=1と同じで何かをカウントするときなどに良く使われましてこの操作はインクリメントとよばれます。
++i; //これと
i+=1; //これがおなじ。
またi++というのもありますが、これは増加する前の値(変数じゃなくて)をかえします。
ただこの戻り値を使わないならぜんぜん違わないのであまり気にすることは無いです。
ところで先ほどの=は左の変数に右の値を代入して代入したあとの左の変数自身を返します。
関数の考え方で様々なものが説明できます。
値の型を変換することをキャスティングといいますが、それもこんな感じです。
double hoge;
hoge=double(4);//4.0と書けばいいのに何でこんなことするかな。
これもdouble()という関数を考えて見れば簡単です。int型の値を引数として一つ持ちdouble型の値を返すのです。
さて関数の引数の使い方ですが、
int plus(int,int,int);
と関数が宣言されているとき、
int plus(int a,int b,int c)
{
return (a+b+c);
}
などとできます。
つまりplus関数が呼ばれたときに関数の中でa,b,cが定義されて、呼んだときの引数の値で初期化されます。
plus(1,3,5);
と呼ぶと、plus関数の中で
int a=1;
int b=3;
int c=5;
と同じ操作が行われていると考えるとわかりやすいでしょう。
この関数で使われるa,b,cというのはこの関数でしか使われないものであることに気をつけましょう。
もし関数に、変数に代入するなどの操作をさせたいときは参照型を使って変数自身を渡すようにしましょう。
/*いれかえ関数*/
int swap(int&,int&);
int swap(int& a,int& b)
{
int temp;
temp=a;
a=b;
b=temp;
return 0;
}
これで実際にswap(x,y)とよべば、xとyの中身がいれかわります。詳しくは第04回テキストにもあります。