みんな分かるC言語入門3回目は「C言語の変数」について触れていきます。
本記事の内容
・C言語の変数のルール
C言語歴15年の著者がどこよりも分かりやすく解説します!
目次
C言語の変数
変数とは
C言語の変数は”データを入れておく場所”です。
数学の”変数”とはちょっと違うと考えてください。
変数には数字や文字データを格納します。
RPGゲームで例えると、
- 主人公の名前
- レベル
- HP
なども変数に格納されています。
変数の宣言
変数は使う前に「この変数を使いますよ」と事前に”宣言”することが必要です。(変数の定義とも言います)
宣言をせずに使うとコンパイルでエラー出力され、コンパイルを通すことができません。
- #include <stdio.h>
- main()
- {
- int a; /* これが変数 a の宣言 */
- a = 0;
- printf("%d",a);
- }
4行目で a という変数が宣言されています。
int (Integer 整数の意味)は変数の”型”です。(”データ型”とも言います)
「intという型で変数 a を定義します」という意味になります。
4行目の変数の宣言がないとコンパイルエラーとなりプログラムを実行することができません。
変数の宣言は
<データ型> (スペース) <変数名>
という書式になりますが、カンマで複数の変数をまとめて宣言することも可能です。
- int a;
- int b,c,d; /* カンマで区切って複数変数の宣言も可能 */
変数の宣言の位置
変数の宣言(定義)は関数の最初にまとめて記載する必要があります。
- #include <stdio.h>
- main()
- {
- int a;
- a = 0;
- printf("%d",a);
- int b; /* 途中で変数の宣言はダメ、コンパイルエラーになります */
- b = 1;
- printf("%d",b);
- }
6行目は変数の宣言ではないので、宣言は終わりでここからプログラムの処理が始まることになります。
8行目で変数 b の宣言がありますが、プログラムの処理がすでに始まっているので、コンパイルエラーとなります。
- main()
- {
- int a;
- int b; /* 変数の宣言はプログラムの処理が始まる前にまとめて行う */
- a = 0;
- b = 1;
- printf("%d",a);
- printf("%d",b);
- }
こちらが正しいプログラムです。
このようにプログラムの処理が始まる前に、変数の宣言は関数の先頭でまとめてしましょう。
変数の名前
変数の名前は下記のルールに従えば、自由につけて問題ありません。
- 最初の1文字目:アルファベットまたはアンダーバー(_)
- 2文字目以降:アルファベット、またはアンダーバー(_)、または数字
- 文字数:31文字まで(C言語の標準”ANSI C”で決められています)
- アルファベット:大文字と小文字は区別される
- 予約語:使用禁止
予約語というのはC言語で使われる命令語のことで変数名として使えません。
ここまで出てきた int も予約語です。
C言語の予約語は以下の通りです。
C言語の予約語一覧
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
変数の名前のOK例とNG例を紹介しておきます。
OKの例
aBcD
no_01
NGの例
for (予約語はダメ)
変数の初期化
変数を宣言(定義)したら、必ず初期化(初期値を与える)をする必要があります。
- #include <stdio.h>
- main()
- {
- int a;
- printf("%d",a); /* 変数 a が初期化されていないので何が表示されるかわからない */
- }
こちらのプログラムを実行したらどうなるでしょうか。
(printf関数は変数の値を表示させます)
変数 a は値が代入されていませんので、何が入っているかわかりません。
このままでは不定値となってしまうので、初期化が必要になります。
初期化は変数に初期値を代入すればよいです。
書式は <変数> = <初期値>; です。
- #include <stdio.h>
- main()
- {
- int a;
- a = 0; /* 値を読み出す前に初期化をする */
- printf("%d",a);
- }
このように値を読み出す前に必ず初期化をしましょう。
- #include <stdio.h>
- main()
- {
- int a = 0; /* 変数の宣言と初期化は1行にまとめられる */
- printf("%d",a);
- }
このように変数の宣言と初期化を1行にまとめることもできます。
宣言と初期化の例
変数の宣言と初期化のパターンをいくつか紹介しておきます。
①通常のパターン
- int a;
- a = 0;
②複数の変数をまとめて宣言するパターン
- int a,b;
- a = 0;
- b = 1;
③複数の変数の宣言と初期化をまとめてするパターン
- int a = 0, b = 1;
変数の型とサイズ
ここまで変数の宣言に整数の型を示す int を使ってきました。
int 型を含むC言語で使う型は下記の通りです。
符号なし整数型
0と正の整数値を使う場合は下記の型を使います。
データ型 | バイトサイズ | 値の範囲 |
unsigned char | 1 | 0 ~ 255 |
unsigned int | 実装依存 | 実装依存 |
unsigned short | 2 | 0 ~ 65535 |
unsigend long | 4 | 0 ~ 4294967295 |
符号つき整数型
0と正・負の整数値を使う場合は下記の型を使います。
データ型 | バイトサイズ | 値の範囲 |
char | 1 | -128 ~ 127 |
int | 実装依存 | 実装依存 |
short | 2 | -32768 ~ 32767 |
long | 4 | -2147483648 ~ 2147483647 |
浮動小数点型
小数点を扱う場合は下記の型を使います。
データ型 | バイトサイズ | 値の範囲 |
float | 4 | 1.175494e-38 ~ 3.402823e+38 |
double | 8 | 2.225074e-308 ~ 1.797693e+308 |
long double | 12 | 3.362103e-4932~1.189731e+4932 |
C言語のイコール(=)について
初期化をするために <変数> = <初期値>; を使うと説明しました。
C言語では
a = 0;
は値 0 を変数 a に代入する
というプログラムになります。
a = b
これは学校で習った数学の数式だとaとbは同値という意味になりますが、C言語の場合はbの値を変数 a に代入するということになります。
今までの式と感覚がちょっと違いますよね。
間違えないようにしましょう。
最初は
a ← b
と考えると分かりやすいかもしれません。
コラム:C言語の変数
最初は数学と違う a = b の式の扱いに慣れないかもしれませんが、実際にプログラミングの経験を重ねればすぐに感覚で身に付くでしょう。
また、変数の初期化をしなくてもコンパイルエラーは出ないですし、気づかないまま放置してしまったなどはC言語あるあるです。
最初は特に初期化を忘れてしまうことが多いので、気を付けましょう!