変数と識別子

値を詰め込めー


ここまでで計算させてきたけど、この演算結果を 保存して再利用する ことはできなかった。悲しい。

そこで、変数 を利用する。これは値に名前を付ける機能だよ。例えば 24variable という変数に 代入する っていうのは、

?「フン。24 というのかい。贅沢な名だねぇ。」

?「今からお前の名前は variable だ。いいかい、variable だよ。」

?「分かったら返事をするんだ、variable!!」

って感じ (適当)。

変数を作る

変数を作るには、

名前;

という文法で書くと使えるようになる。

複文の中で変数の名前を登場させることを 変数の宣言 という。

変数は 宣言した後でないと使えない

のところには、変数に入れられるものを書く。整数なら int (integer - 整数の略) を書く。型について詳しくは次のページで。

int main() {
  int variable;
}

variable という名前の変数が生まれました!元気な男の子です!(?)

変数は = 演算子をつかって 中身を変更 できる。変数 = 新しい値の式 と書く。

int main() {
  variable; // これは NG。C/C++ での 名前 は、宣言した後でないと使えない

  int variable;

  variable = 3; // 3 に意味はない。自由に変えてね

  variable = variable / 2; // 1。そして代入される

  0 = variable; // これは NG。埋め込んだ値 0 を変更しようとしている
}

右の式を左の変数に入れる演算子だから、左右逆にはできない よ。方程式とは違うからね。

代入演算子 の式は、代入された変数 になる。

これによって、同じ値を代入するときに連ねて書ける。

ただし、括弧がないときは今までと違って 右から順に 処理される。

int main() {
  int variable;
  int variable_neo;

  variable_neo = variable = 0;

  variable_neo = (variable = 1); // 上と同じ順序、代入は右から順に作用する

  (variable_neo = variable) = 3; // これは上の 2 つとは順序が違う
}

中身を取り出すときは、変数の 名前を他の数と同じように書く

#include <iostream>
int main() {
  int variable;
  variable = 1;
  variable; // 取り出しただけ
  variable + 2; // 計算したが代入はしていない
  variable = variable + 1; // 代入している
  std::cout << variable * 2 << "\n"; // 出力を確かめてみよう
  1 = variable; // NG
}

変数の名前は、わかり易い 目的に応じた名前 にしておこう。a とか x とかにしているとわからなくなる。

#include <iostream>
int main() {
  int price; // 価格を表す変数なので
  price = 108;
  std::cout << price << "\n";
  price = price / 2;
  std::cout << price << "\n";
}

ただ、つけられない名前もある。詳しくは下で。

識別子

C++ で自由に作って使える名前は 識別子 っていう。

これは、

  • 英文字 (大文字と小文字は区別される)
  • 数字 (一文字目には使えない)
  • アンダースコア _ やダラー $ 、日本語や中国語などの 特別な扱いがされない文字
  • C/C++ で特別な意味を持つ英字句 (int、and、inline など) ではない名前

しか使えないという制約がある。

↓はすべて問題なく使用できる。英語がわからないならローマ字でもいいからわかりやすくすること。

int price;
int PRICE;
int $$$;
int something_nice;
int a_variable_which_has_very_too_long_name;
int YDK48;
int eigo_ga_wakaranai;
int nedann;

一応日本語だけの名前とかにもできるけれど、しないようにしようね。

なぜかというと、もし自分の母国語を使うのが許されるとしたら、外国人はすぐに日本語や中国語やロシア語をタイプできるかな?

int 値段;
int Спасибо;
int 不客氣;

↓は制約を満たしていないからコンパイルできない例だよ。憐れだねぇ。

int 0_is_zero;
int -minus;
int "quote";
int and;
int inline;