こんな疑問にお答えします。
この記事ではプログラムに欠かせない変数の基礎について解説します。
記事の内容
- 変数とは何か?
- 変数の種類と使い方
- 変数名を付けるときのルール
変数とは?
C言語における変数は数学の授業で習った変数x, yと同じようなものです。x=1, y=5, x+y=6のように数字の代わりとして使えます。さらにC言語ではx='a', y='@'というように文字や記号も代入できます。
変数の使い方
変数を使う時は最初に変数が整数・小数点以下がある実数・文字の内どれなのかを書きます。このような数値の種類をデータ型と言います。その後に変数の名前を書きます。
データ型に変数名を割り当てることを変数の宣言と言います。
変数の宣言
データ型 変数名;
以下ではデータ型ごとの変数の使い方を解説します。
整数
整数は以下のように使えます。
例:
#include <stdio.h> void main() { int num; //①変数の宣言 num=1; //②変数numに1を代入 printf("num=%d\n",num); //③numの値を表示 }
実行結果
num=1
①「int num」とはnumが整数(integer)の変数ですよという意味です。
②では変数numに1を代入しています。このように最初に値を代入しておくことを初期化と言います。
変数の宣言と初期化は以下のように書くこともできます。
例1:
int num=1;
例2:
int num1,num2=0,num3; num1=1; num3=2;
1=numのように書いてもnumに値を代入できません。必ず代入される変数は左辺に置きます。
③のprintfのカッコ内に書いた%dはここに整数がきますよという意味です。%dのように変数のフォーマットを指定するものをフォーマット指定子といいます。表示したい値は「"」の後ろに「,」で区切って書きます。この場合は変数numを表示したいので「,num」と書いています。
変数の宣言に使うintはデータ型と呼ばれます。整数のデータ型にはint以外にも複数あります。
データ型 | データサイズ | 数字の範囲 |
int | 4バイト | -2,147,483,648 ~ 2,147,483,647 |
unsigned int | 4バイト | 0 ~ 4,294,967,295 |
long | 4バイト | -2,147,483,648 ~ 2,147,483,647 |
unsigned long | 4バイト | 0 ~ 4,294,967,295 |
short | 2バイト | -32,768 ~ 32,767 |
unsigned long | 2バイト | 0 ~ 65,535 |
char | 1バイト | -128 ~ 127 |
※int型のデータサイズおよび数字の範囲はコンパイラによって異なり、intが2バイトのこともあります。一般的には上記の設定になっていると思います。
詳しくはこちら
-
bit(ビット)とbyte(バイト)の違い、換算時の計算方法を解説
ビットとバイトってどう違うの?メガバイトとかギガバイトとか聞くけど何のことかよくわからない。 こんな疑問にお答えします。 記事の内容 ビット・バイト間の換算方法 ビットとバイトの違い 2進数とは? キ ...
続きを見る
バイト数が多いほど代入できる数字の範囲が広くなる一方でメモリを圧迫します。メモリの容量は限られているので扱う数字のサイズに合ったデータ型を選びます。
文字
char型は文字を代入するのにも使われます。整数と文字どちらを代入してもいいというわけです。代入できる文字はアルファベットまたは記号を1文字だけです。
例:
#include <stdio.h> void main() { char chara1='A', chara2=1; //変数chara1,chara2に値を代入 printf("chara1=%c\n",chara1); //%cを使ってchara1の値を表示 printf("chara2=%d\n",chara2); //%dを使ってchara2の値を表示 }
実行結果
chara1=A
chara2=1
char型の変数を文字として表示する時のフォーマット指定子は%cです。整数として表示するときはintの時と同じ%dを使います。
小数点以下がある実数
例:
#include <stdio.h> void main() { float num1=0.01, num2=1.0; //num1,num2に代入 printf("num1=%f\n",num1); //num1の値を表示 printf("num2=%f\n",num2); //num2の値を表示 }
実行結果
num1=0.010000
num2=1.000000
小数点以下がある数字を浮動小数点実数といいます。浮動小数点実数として代入したいときは小数点以下も書きます。例では「num2=1」でなく「num2=1.0」と書きます。
浮動小数点実数用のデータ型はfloat以外にdoubleもあります。違いは以下の通りです。
データ型 | データサイズ | 仮数の範囲 | 指数の範囲 |
float | 4バイト | 6~7桁 | 10-38 ~ 1038 |
double | 8バイト | 15~16桁 | 10-308 ~ 10308 |
仮数・指数とは?
例えば-0.01は指数表記という書き方で-1.0×10-2と書けます。仮数とは指数表記で書いた時の1.0の部分、指数とは10-2の-2の部分のことです。
※仮数の小数点以上は1桁になるように指数を調整します。(0.1×10-3みたいにならないようにということです。)
フォーマット指定子はfloatは%f、doubleは%lfです。
floatは%e、doubleは%leを使って指数表記で表示することもできます。
例:
#include <stdio.h> void main() { float num=0.01; printf("num=%e\n",num); //%eを使用 }
実行結果
num=1.000000e-002
e-002は10-2という意味です。
変数から変数への代入
変数どうしをイコール「=」で繋ぐことで右辺の変数の値を左辺の変数に代入できます。
例:
#include <stdio.h> void main() { int num1=1, num2=5; //変数の初期化 num1=num2; //num1にnum2の値を代入 printf("num1=%d\n",num1); //num1の値を表示 }
実行結果
num1=5
変数名のルール
変数名にできる文字列
- 最初の文字はアルファベットまたはアンダーバー「_」
- 2文字目以降はアルファベットまたは「_」または数字
OKな変数名の例:a, b1, _aA, c_10, _1
ちなみに大文字と小文字は区別します。例えばaaとAaは異なる変数として認識されます。
変数名にできない文字列
- アルファベットと「_」と数字以外を含む
- 数字から始まる
- 予約済み識別子
- 予約語
アルファベットと「_」と数字以外を含む
変数名に使えるのはアルファベットとアンダーバー「_」と数字のみです。それ以外を含む名前はNGです。
NGな変数名の例:a%, -b, &c, #d, e+, あいう
数字から始まる
変数の最初の文字を数字にするのはNGです。2文字目以降に数字を使うのはOKです。
NGな変数名の例:1_a, 2b, 3_
予約語
intやfloatなどすでに役割が与えられている文字列を予約語と言います。予約語は変数名として使えません。
予約語一覧:
auto, break, case, char, const, continue, default, do, dougle, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeod, static, struct, switch, typedef, union, unsigned, void, volatile, while
予約済み識別子
予約済み識別子とはコンパイラやライブラリで使うために予約されている名前のことです。
- 「_」で始まるグローバル変数
- 「_」で始まり、その次が大文字
- アンダーバー2つ「__」で始まる
結局どう名付けたらいいの?
変数名のルールは細かいのでどう名付けたらいいかわからなくなりがちです。なので初心者の内はa, a1のようにアルファベットだけか、アルファベット+数字の変数名にしておけば大丈夫です。
他の名前も付けたいと思ったタイミングでルールを確認して別の名付けパターンと考えるといいかと思います。
おわりに:変数はなぜ必要?
上で挙げた例はシンプルなので変数がなくても困りませんが、C言語を学んでいくと変数が必須な場面が出てきます。
例えば以下はnum=1の場合の計算結果を表示するプログラムです。
#include <stdio.h> void main() { printf("num=1 num+1=2 num+2=3, num+3=4\n"); }
numの値を0に変更する場合は計算結果をすべて書き直す必要があります。一方で上のコードは変数を使って下のように書き直せます。
#include <stdio.h> void main() { int num=1; printf("num=%d num+1=%d num+2=%d, num+3=%d\n",num,num+1,num+2,num+3); }
num=0に変更したければ「num=1」を「num=0」と書き直すだけでいいので楽です。
このように値を一括変更できて楽ですし、後々出てくる「関数」を使うのにも変数が必須です。他にも色々な場面で変数があると助かる場面が出てきます。