C言語/データ型と変数

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

データ型と変数の基本[編集]

変数とは、数値などのデータをひとつ入れるための領域のことである。

C言語では、基本的に、1つの変数には、1つのデータしか入れられない。

宣言[編集]

変数を使用するには、前もって宣言をする必要がある。

とりあえず、手本のプログラムとして

#include <stdio.h>

int main(void)
{
    int a=3;
    printf("%d",a);
    return 0;
}

というプログラムで、考えよう。

では、解説していこう。

読者の注目先として、上記コードにある、

    int a=3;

の部分に注目してほしい。

int と宣言したら、intは「整数」という意味であり、その整数iの内容が3であるという意味である。なお、もし小数などを宣言したい場合は、intの部分が、他のキーワードに変わることになる。

なので、もし

    int a=3.45;

(×)

のように、整数を宣言したにもかかわらず、宣言された変数に小数の値が入ると、コンパイルなどがエラーになる。

では、C言語では、なぜ、わざわざ整数しか使用できない変数を用意するかというと、1970年代ごろの昔の理由では、メモリの使用量を節約するためであった。

小数データを保存するためには、整数データを保存する場合よりも、メモリの使用量が多くなるのである。


C言語では、「int」 は、整数として宣言したい変数の直前に、つける必要がある。他の多くの言語でも、同様に、変数の前につける事が多い。


上記のコードの「int」のように、これから宣言しようとしている変数についての、データの種類をあらわすための語句を、型(かた)という。

「int」は、整数の型を表す。

さて、

    int a=3;

とは、整数型の使用を宣言しており、その変数の名前は「i」であり、その変数iには3を代入する、という意味のコードである。


さて、変数の宣言と、代入の命令とは、本来は異なる命令であるので、

    int a;
    a=3;

というように、2つの命令に分けて記述することもできる。

変数に、なんらかの数値を入れることを「代入」という。


変数の文字出力[編集]

#include <stdio.h>

int main()
{
	int a=3;
	printf("%d",a);
	return 0;
}


これを実行すると場合、「3」が表示される。

しかし、3の直後に、

3[ユーザー名 ~]$ 

のように、改行されずに入力カーソルが表示されるので、とても見づらい。(リナックスで、コマンド端末から実行すると、こういう表示になる。)

なので、まず、「3」を表示したあとに改行するように、プログラムを修正しよう。

(改良例)

#include <stdio.h>

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

である。\nとは、「改行しろ」という意味のキーワードである。

上記の改良例を実行すると、

3
[ユーザー名 ~]$ 

のように、「3」のあとに改行されて表示される。


変数を表示するには、printf関数を使用する必要がある。

ここで気をつける必要があるのだが、C言語のprintf関数の中での二重引用符""の意味は、BASICやその他BASIC派生言語でのprint関数での二重引用符""の使いかたとは、意味が違う。

C言語でのprintf中にある""は、「これから画面に表示を行う」という意味だけを表し、けっして、引用符""内にある文字列「%d」をそのまま画面に表示したりはしない。

なお、「%d」とは、「10進数で表示しろ」という意味のキーワードである。

そして、printf("%d",a);のように、printf関数の記法は、

printf("何進数で表示するか?",どの変数を表示するのか?);

という記法になっている。

なので、たとえば、変数がいくつもあっても、

#include <stdio.h>

int main()
{
    int a=3;
    int n=7;
    printf("%d\n",n);
    return 0;
}

のように、どの変数を表示すればいいかを、必要に応じて区別できる。

この場合、「7」が表示される。なお、変数名に1文字の「n」や、1文字の「d」なども使うことができる。

とはいえ、\nのnと、まぎらわしいので、他の変数に変えるのが良いだろう。


#include <stdio.h>

int main()
{
    int a=3;
    int tugi=8;
    printf("%d\n",tugi);
    return 0;
}
実行結果
8


変数名には、2文字以上の文字も使える。ただし、先端を数字にすることはできない。「1tugi」などの変数名を宣言しようとすると、エラーになり、コンパイルできない。

変数名の最初の文字が、もし数字だと、エラーになる。変数名の最初の文字は、英字である必要がある。

変数と文字の表示[編集]

#include <stdio.h>

int main(void)
{
    int a=3;
    int n=7;
    printf("変数は%dです\n",n);
    return 0;
}
実行例
変数は7です

上記のプログラムのように、printf関数の""には、文字を表記することもでき、その文字が「%d」や「\n」などのキーワードでないかぎりは、そのまま表示する。


#include <stdio.h>

int main(void)
{
    int a=3;
    int n=7;
    printf("変数nは%dです\n",n);
    return 0;
}

;実行結果

変数nは7です

この「変数nは」の「n」のように、出力を指定している変数欄と同じ文字があろうが、そのまま「変数nは」表示する。

初心者には、一見すると分かりづらい仕組みかもしれないが、しかし分からなくても気にせず、次の節を読んでください。

複数の変数の表示[編集]

#include <stdio.h>

int main(void)
{
    int a=3;
    int b=7;
    printf("さいしょの変数は%dです。つぎの変数は%dです。\n",a,b);
    return 0;
}

のようにして、複数の変数を表示できる。

実行結果
さいしょの変数は3です。つぎの変数は7です。


  • 他の例
#include <stdio.h>

int main(void)
{
    int a=3;
    int b=7;
    printf("変数aは%dです。変数bは%dです。\n",a,b);
    return 0;
}
実行結果
変数aは3です。変数bは7です。


次に、

#include <stdio.h>

int main(void)
{
    int a=3;
    int b=7;
    printf("さいしょの変数は%dです。つぎの変数は%dです。\n",b,a);
    return 0;
}

のように、printfの出力順序欄にあるaとbの順序を入れ替えみると、・・・

実行結果
さいしょの変数は7です。つぎの変数は3です。

のように、出力結果も、入れ替わっている。


詳細[編集]

変数とはデータを格納しておく領域、またはその個々の領域に付けられた識別子のことである。 変数はふつうメモリ上に確保され、値を代入したり参照したりすることができる。

C言語で使える「変数」は、かならずしも数値でなくてもよく、文字でも良い。しかし、文字を変数に使うには、初心者にとっては、やや高度なテクニックを使うので、本wikibooksのC言語の講座では当面は、数値を入れられた変数を、あつかうとしよう。

変数を使用する手順は以下のとおりである。

1. 変数の使用を宣言する(必要ならば変数の内容も宣言できる)。
2. 変数へ値を代入する。
3. 変数の値を参照する。


変数の宣言の記述は次のようになっている。


記憶域クラス指定子opt 型修飾子opt 型指定子 変数の識別子;


記憶域クラス指定子と型修飾子はそれぞれ省略できる。 また記憶域クラス指定子、型修飾子、型指定子の順序はこの通りでなくてもよい。 記憶域クラス指定子、型修飾子、型指定子については後述する。

また、変数の宣言と同時に初期化することもできる。

//例 int型の変数を宣言し、0で初期化する。
int main(void)
{
	int i=0;
}

同じ型の変数は「,(コンマ)」で区切って一行で宣言できる。

//例 int型の変数i, j, kを一行で宣言する。
int main(void)
{
	int i, j, k;
}

代入[編集]

変数にデータを格納することを代入と呼ぶ。 代入の記述は次のようになっている。

変数名=;

「=」は代入演算子と呼ばれ、左辺の変数の識別子が指す変数に右辺の式の値を代入する。 数学における等号とは異なる用法であるので注意せよ。 式とは定数、変数、関数の返却値などを演算子を使って結合したものである。

変数と式のデータ型が異なる場合、 式のデータ型を変数のデータ型に自動的に変換する(暗黙の型変換)。 その際、変数のデータ型が式のデータ型より小さい場合、 文字型又は整数型同士の場合、上位ビットが切り捨てられ、 [1] 変数が文字型又は整数型で式が実浮動小数点型の場合、小数点以下切捨てとなり、 [2] 実浮動小数点型同士の場合、精度が落ちる。 [3]


脚注[編集]

  1. ^ 『JISX3010:2003』p.32「6.3.1.3 符号付き整数型及び符号無し整数型」
  2. ^ 『JISX3010:2003』p.32「6.3.1.4 実浮動小数点型及び整数型」
  3. ^ 『JISX3010:2003』p.32「6.3.1.5 実浮動小数点型」