変数


今回はプログラミングには欠かす事のできない変数という概念を説明します。
コレもほぼ全てのプログラミング言語に共通です。

習うより慣れろデス。
以下のコードをコンパイルしてみてクダサイ。

#include <stdio.h>

int main(){
int nABC;
nABC = 100;
printf("%d", nABC);
return 0;
}

大体分かると思いますケド、
100
と表示されたハズです。


話は変わりますが、プログラムの話は抜きにして次の数式を見てください。
a = 20
b = 80
c = a + b

cの値は何でしょう?
当然、c = 100という式が成り立ちます。

そして、変数とは先述の数式で言う、 a, b, c に当たります
また、C言語のプログラミングでは原則的に;(セミコロン) を文の終わりに付加するので

a = 20;
b = 80;
c = a + b;

こんな感じで書きます。


それでは またプログラムの話を抜いて次の数式を見てください。
x = 100
数学では、当然この数式の意味は xは100に等しい という意味になります。
しかし、C言語では この数式の意味が xに100を代入する という意味になります。

また、数学では x = 100 ならば 100 = x が成り立ちますが、
C言語では 100 = x と 書くことはできません。

あくまでも 左辺の変数(=より左側の式)に右辺(=より右側の式)を代入する が基本です。


更に、変数には最後に代入した値だけ残ります

a = 1;
a = 2;
a = 3;

現在のaの値は、何でしょう?

先ほどの 変数には最後に代入した値だけ残る という性質を踏まえて考えると aの値は3です。
なので、一つの変数は複数の値を記憶する事ができません。


また、変数は宣言をしなければ使えません
下記のソースを見て下さい。

#include <stdio.h>

int main(){
n = 100;
printf("%d", n);
return 0;
}

このプログラムは、コンパイルできません。
なぜならば、宣言をしていない変数を使用しているからです。

宣言とは、

int n;

こういった (変数の種類)(スペース)(変数の名前); から成る文です。

変数の種類は変数の型名と呼び、
整数を扱う変数(int)、少数を扱う変数(float, double)、文字列を扱う変数(char)など、多種多様です。


最後に、最も重要な性質として 変数は必ず 初期化、及び代入後でないと使用する事はできない
という事です。

言葉で説明するより、ソースを見た方が早いので下記のソースを見て下さい。

#include <stdio.h>

int main(){
int n;
printf("%d", n);
return 0;
}

このプログラムをコンパイルして、実行してはイケマセン。
(本当は実行しても大したコトは無いケド、責任取りまセン。)

このプログラムは、int型の変数nを、数値の代入や初期化をせずに
printfで表示しようとしています。

コレでは、どんな数値を表示すればイイのかコンピュータが分からず、
コンピュータが調子に乗って、滅茶苦茶な数値を勝手に代入します。




それはサテオキ、前回の講座で使用した、

#include <stdio.h>

int main(void){
/* 数字の出力 */
printf("1年間は%d日あります。一日%d分有ります。", 365, 24*60);
printf("\n");
printf("1.0 = %f, 2.0 = %1.0f, 1+2=%10.5f", 1.0, 2.0, (1.0+2.0));
printf("\n");
printf("a = %d, 97 = %c", 'a', 97);
printf("\n");
}

このプログラムを、実際に書き換えて見ましょう。


#include <stdio.h>

int main(void){
/* 日にちと分の出力用 (宣言->初期化という処理を一気に行う) */
int nDay = 365;
int nMinute = 24*60;

/* 浮動小数点の出力用 (同じ型の変数ならば、同時に1行で宣言できる) */
float fBuff1, fBuff2;

/* 文字の出力 (宣言->初期化 & 同時宣言を行っている) */
char chBuff1 = 'O', chBuff2 = 'K';

/* 出力 */
printf("1年間は%d日あります。一日%d分有ります。", nDay, nMinute);
printf("\n");

/* 数値の代入 */
fBuff1 = 1.0;
fBuff2 = 2.0;

printf("fBuff1 = %f, fBuff2 = %f, fBuff1+fBuff2=%10.5f", fBuff1, fBuff2, fBuff1+fBuff2);

/* 文字の出力*/
printf("\n");
printf("憎き敵、グレートムタに%c%cされてしまいました。", chBuff2, chBuff1);

return 0;
}

この講座を見てるアナタなら、スグに分かるでしょう。

ココで一番重要なのは、変数の命名
全部、nやらfchとか付いてワケわからん、って方が多いはず。

コレは、ハンガリアン記法という命名規則に則っているからなのデス。

例えば buff という変数があったとします。
(buffはバッファ(buffer)というコンピュータ用語から来てます。
意味は、一時的にデータを保存する領域、ってのが一般的な意味。)

解説の通り、バッファという単語を知っている人は 変数名を見れば
データを一時的に記憶するんだなぁ、と分かります。

しかし、buff だけでは どんなデータを扱うかまるで分かりません。

整数ならint, 小数(実数)ならfloat, 文字ならcharを使わなければなりません。

よって、int型なら変数名の前に nを付ける、char型なら chなど、
一目でその変数の型が分かるように、命名規則が必要になります。

そしてm世界共通の変数の命名規則を表したのがハンガリアン記法デス。
(詳しくは次章。)


最後に、グレートムタ はプロレスラーです。
グレートムタしかできない毒霧は必見です。

グレートムタは強いです。