今回は《「変数」の基礎を学ぼう》というテーマで記事をまとめます。
「変数」はプログラミングにおいて、基本であり、奥義の1つでもあります。
つまり、かなり重要度の高い要素なのでしっかり学んでおきましょう。
とはいえ、この記事ではその全てを書くつもりはありません(というか、書ききれません^^;)ので、あまり気負いせずにご覧ください。
尚、現在執筆中のC言語入門記事は以下の人を対象としています。
- C言語プログラミングの学習をこれから始めたい人
- C言語プログラミングの学習を始めたばかりの人
「変数」の基礎を学ぼう
変数とは
変数とは、値を保存しておく為の「名前の付いた箱」です。
数値や文字などの値を格納することができ、格納してある値を取り出して使うことができます。
変数を定義する
変数は「型」と「変数名」で構成され、最後に ;(セミコロン)で締めます。
変数の型 変数名;
変数の基本的な型は大きく分けて、文字型・整数型・浮動小数点型の3つに分類されます。
主要となる型の種類と型名の表をまとめました。
型の種類 | 型名 |
---|---|
文字 | char |
整数 | int |
浮動小数点 | float |
型は他にも存在しますが、C言語プログラミングに慣れるまではこの3つを使っていきましょう!(基本的な型の一覧は、本記事の下部にまとめてあります。)
また、型ごとの変数定義例をまとめておきます。
char moji; /* 文字型の変数 */ int seisu; /* 整数型の変数 */ float syosu; /* 浮動小数点型の変数 */
変数名のルール
変数名は好きな名前を付けることができますが、名前を付けるにあたっていくつかの条件が存在します。
【条件】
- 使用可能文字は以下の3種類で、全て半角(全角は不可)
- アルファベット(A〜Z,a〜z)
- 数字(0〜9)
- アンダーバー(_)
- 1文字目はアルファベット or アンダーバー(数字は不可)
- C言語の構文として使用される「予約語」は変数名として使用できない
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
int | long | register | return |
signed | sizeof | short | static |
struct | switch | typedef | union |
unsigned | void | volatile | while |
【補足】
- 大文字/小文字は別モノ扱いとなる(例えば、value と Value は別の変数)
変数に値を代入する
以下の書式でコードを書くことで、変数に値を代入することができます。
変数名 = 値;
これだけだと、イメージが湧きにくいかもしれませんね。
型ごとに値の代入例をまとめてみました。
char moji; /* 文字型の変数 */ int seisu; /* 整数型の変数 */ float syosu; /* 浮動小数点型の変数 */ moji = 'a'; /* 文字型の変数に値を代入 */ seisu = 10; /* 整数型の変数に値を代入 */ syosu = 5.5; /* 浮動小数点型の変数に値を代入 */
賢い皆さんならお気づきかもしれませんが、文字型の変数に値を格納する場合、文字を '(シングルクオーテーション)で囲む必要があります。
変数の値を別の変数に代入
また、変数に格納されている値を別の変数に代入することもできます。
int num1; int num2; num1 = 10; num2 = 20; num1 = num2; /* num1にnum2の値を代入 */
コードの4~6行目を解説すると、、
4行目 | num1に10を代入 | num1の値は「10」 |
5行目 | num2に20を代入 | num2の値は「20」 |
6行目 | num1にnum2の値を代入 | num1の値は「20」、num2の値は「20」 |
変数の値を表示してみよう
ここまで変数の定義方法と変数への値の代入方法を学んできました。
次は、変数に格納されている値を確認する方法を解説します。
printf関数を用いた変数値の表示
printf関数には「変数の値を画面上に表示する」機能が搭載されています。
整数型を表示する場合の例は、以下のような形式になります。
printf( "seisu=%d\n", seisu ); /* 整数型の変数の値を表示 */
"%d"の部分にseisuに格納されている値が表示されます。
"%?" の ? 部分に特定の文字を指定することで文字や数値をコンソール画面上に表示することができます。この"%?"のことをフォーマット指定子と呼びます。
とりあえず、ここではchar、int、floatに対応したものだけ紹介しておきます。
(他のフォーマット指定子については、また別記事にまとめます)
型名 | 指定子 |
---|---|
char | %c |
int | %d |
float | %f |
それでは、サンプルコードを用意したので確認しましょう。
(皆さんも自分で打ち込んでみてくださいね!)
#include<stdio.h> void main(){ char moji; /* 文字型の変数 */ int seisu; /* 整数型の変数 */ float syosu; /* 浮動小数点型の変数 */ moji = 'a'; /* 文字型の変数に値を代入 */ seisu = 10; /* 整数型の変数に値を代入 */ syosu = 5.5; /* 浮動小数点型の変数に値を代入 */ printf( " moji=%c\n", moji ); /* 文字型の変数の値を表示 */ printf( "seisu=%d\n", seisu ); /* 整数型の変数に値を表示 */ printf( "syosu=%f\n", syosu ); /* 浮動小数点型の変数に値を表示 */ }
結果が以下のようになればOKです。
文字・整数・浮動小数点の3つの表示方法がわかりましたね。
是非、サンプルコードを修正して色々試してみてください!
もう少し「変数」について学ぼう
グローバル変数 / ローカル変数
C言語における変数は、定義の位置によってグローバル変数とローカル変数の2つに分かれます。
関数の外で定義された変数を「グローバル変数」と呼び、関数の中で定義された変数を「ローカル変数」と呼びます。
グローバル変数は全ての関数から使用可能で、ローカル変数はその関数内でしか使用できないという特性を持ちます。
int global; /* グローバル変数 */ void main(){ int local1; /* ローカル変数 */ /* ここで使用できるのは global と local1 */ } void test(){ int local2; /* ローカル変数 */ /* ここで使用できるのは global と local2 */ }
本ブログのC言語入門編記事では、まだ関数の解説をしていません。よって、「ここの話がイマイチわからない」と感じている方もいるかと思います。
いくつか先の記事で「関数」の解説をしますので、その際にもう一度解説したいと思います。ここでは「関数外に定義されている変数がグローバル変数、関数内に定義されている変数がローカル変数」といった程度の認識で十分です。
変数の初期化
C言語では、変数定義と同時に変数に値を代入することを「変数の初期化」と呼びます。
int value = 0;
基本的な型一覧
C言語における、変数の基本的な型を表にまとめました。
種類 | 型名 | サイズ | 値の範囲 |
---|---|---|---|
文字 | char | 1バイト | -128 ~ 127 |
整数 | short | 2バイト | -32,768 ~ 32,767 |
int | 4バイト | -2,147,483,648 ~ 2,147,483,647 | |
long | 4バイト | -2,147,483,648 ~ 2,147,483,647 | |
long long | 8バイト | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
浮動小数点 | float | 4バイト | 3.4E-38 ~ 3.4E+38 |
double | 8バイト | 1.7E-308 ~ 1.7E+308 |
符号なし変数
C言語では、変数に「符号なし」という属性を持たせることができます。
「符号なし変数」とは、「+/- の記号が付与されない変数」、つまり、「プラスのみの変数」となります。
以下に符号なし変数の型一覧をまとめました。通常の変数と比べて、値の範囲が異なることに注意してください。
種類 | 型名 | サイズ | 値の範囲 |
---|---|---|---|
文字 | unsigned char | 1バイト | 0 ~ 255 |
整数 | unsigned short | 2バイト | 0 ~ 65,535 |
unsigned int | 4バイト | 0 ~ 4,294,967,295 | |
unsigned long | 4バイト | 0 ~ 4,294,967,295 | |
unsigned long long | 8バイト | 0 ~ 18,446,744,073,709,551,615 |
尚、float/doubleに関しては「符号なし」は指定できないので注意!
変数は必ず値を代入すること
C言語では変数定義だけを行い、変数に値を代入しなかった場合、その変数にはどんな値が格納されているかわからない状態となります。(格納される値はコンパイラによって異なる)
必ず値を代入してから使用するようにしてください。
【変数定義のみ行った変数を使用した例】
#include<stdio.h> void main(){ int value; printf( "value=%d\n", value ); /* valueの値が不明な状態で使用 */ }
本ブログのC言語入門編記事を読んでいる皆さんは『Visual Studio Community 2019』を使っている筈です。
その場合は、値が代入されていないローカル変数を使用したコードを書くとビルド時にエラーが出力されます。つまり、中途半端なアプリケーションは作成されません。(値を代入しないとエラーがなくならない=アプリケーションが作成されない)
しかし、グローバル変数の場合はビルド時にエラーが出力されない為、使用前に必ず値の代入を行ってください。
変数と対となる「定数」
定数とは
まず、定数は「ていすう」または「じょうすう」と読みます(一般的には「ていすう」のほうが多い)。
変数と対になる存在で、値が変動しないもの全般を「定数」と呼びます。
例えば、'a'といった文字や10といった数値がそれにあたります。
変数の定数化
変数の定義時、型の前に"const"を書くことで「変数」は「定数」となります。
const 変数の型 変数名 = 値;
constを付与した変数はあとから値を変更できません。よって、必ず「変数(定数)の初期化」を行ってください。
文字・整数・浮動小数点のサンプルコードも用意しておきます。
const char conMoji = 'x'; const int conSeisu = 11; const float conSyosu = 6.6;
次回は計算を行います
今回は「変数」の基礎を学んでもらいました。
次回は変数を使った簡単な計算について解説したいと思います。
少しずつプログラミングらしい話になってきてますね!