誰でも分かるC言語入門
■第2話:変数とデータ型
(最終更新日:2024.04.11)
(絵が小さい場合はスマホを横に)
「C言語の変数、型の特徴を学ぼう!」
第2回では、C言語における変数とデータ型について掘り下げる。
変数の宣言と初期化、主要なデータ型(整数、浮動小数点数、文字、文字列)、そして定数の利用方法について学ぶ。
そして、型変換の概念も紹介する。C言語に関する、正確な知識を深めていこう。
1.変数の基礎
C言語では、変数を使用する前にその型を指定して宣言する必要がある。 これにより、コンパイラは適切なサイズのメモリ領域を確保する。 また、変数は宣言と同時に初期値を設定することができる。 初期化は、変数に予測不能な値が入ることを防ぐため、使用する前にしておこう。
変数の型宣言と初期化を同時に行った例
また、変数名は英字またはアンダースコアで始める必要がある。
名前に使える文字は、数字、アンダースコア、英字になり、スペースと特殊文字は使えない。
また、予約語(ifやreturn)なども使えないので注意しよう。
変数のスコープに関しては、他のプログラミング言語と同じで、関数や制御構造内(if文内など)でアクセス可能である。
簡単に説明すると、{}内で宣言した変数は、{}内でのみ有効になる。つまり、ifの中での変数は、ifの外からは呼べない。
下記では、example関数内で変数aを宣言したので、その外からは呼べないということを示している。
変数のスコープ
2.データ型
C言語で使用される主要なデータ型には、整数型、浮動小数点数型、文字型、そして文字列がある。 これらのデータ型は、プログラム内で様々な種類のデータを扱うための基本になる。
整数型
整数型は、正または負の整数を格納するために使用される。
C言語では、int、short、long、unsigned など複数の整数型がある。
例えば、int age = 30; では、age という名前の整数変数を宣言し、30という値を格納している。
unsigned は負の数を格納しない整数型で、0 および正の数のみを扱う。
浮動小数点数型
浮動小数点数型は、小数点を含む数を格納するために使用される。
float と double が一般的な浮動小数点型になる。
float はシングルプレシジョンの浮動小数点数を表し、double はダブルプレシジョンの浮動小数点数を表す。
例えば、double temperature = 36.5; では、temperature という名前の double 型変数を宣言し、36.5という値を格納している。
文字型
文字型は、単一の文字を格納するために使用される。C言語では、char 型が文字を格納するために使われる。
文字はシングルクォート(')で囲む。例えば、char grade = 'A'; のcharでは通常、ASCIIコードとして内部的に整数として扱っている。
文字列
C言語では、文字列は char 型の配列として表現される。文字列はダブルクォート(")で囲む。
例えば、char name[] = "Alice"; では、name という名前の文字配列を宣言し、文字列 "Alice" を格納する。
文字列の終端にはヌル文字(\0)が自動的に追加され、文字列の終わりを示す。文字列を格納する際、最初にchar name[6];と宣言してもOKだ。
3.定数
C言語における定数は、プログラムの実行中にその値が変更されないデータを指す。
定数はリテラル定数とシンボリック定数の二つの主要なカテゴリに分けることができる。
リテラル定数:
リテラル定数は、直接その値が記述された定数だ。数値、文字、文字列などが含まれる。
整数リテラルは、例えば "5", "100", "-33"である。他にも、浮動小数点リテラル、文字列リテラルがあり、それらは言葉の通りの定義である。
シンボリック定数:
シンボリック定数は、プリプロセッサディレクティブ #define または const キーワードを使用して定義される名前付きの定数だ。
これらはプログラムの読みやすさとメンテナンスを向上させるために使用される。
#defineとconstによる定数の定義
#define ディレクティブは、プリプロセッサがソースコードを処理する際に PI を 3.14159 に置換する。
これはコンパイル時に行われるため、実行時のパフォーマンスに影響を与えない。
一方、const キーワードを使用して定義された定数は、変数のように扱われる。
その値はプログラムの実行中に変更できません。この方法では、型チェックが行われ、スコープやストレージクラスの指定が可能になる。
定数を使用することで、マジックナンバー(ソースコード中に直接記述された数値)を避け、プログラムの可読性を高めることができる。
また、同じ値を複数の場所で使用する場合、その値を変更する必要が生じたときに一箇所の修正で済むため、プログラムの保守性が向上する。
4.型変換
型変換(Type Conversion)は、あるデータ型の値を別のデータ型に変換するプロセスだ。
C言語では、自動(暗黙的)型変換と明示的型変換の2種類がある。
自動(暗黙的)型変換:
自動型変換は、コンパイラによって自動的に行われる型変換だ。
通常、これは異なるデータ型を持つ変数が演算される際に発生する。
例えば、整数と浮動小数点数が演算される場合、整数が浮動小数点数に自動的に変換される。
下記の例では、i が double 型に自動的に変換され、d と正しく演算され、resultは15.0になる。
暗黙的型変換の例
明示的型変換(キャスト): 明示的型変換(キャスト)は、プログラマがコード内で明示的に型変換を指示することだ。 これは、特定の操作で特定の型が必要な場合や、データの精度を意図的に変更する場合に使用される。 下記の例では、d の値が int 型にキャストされ、小数点以下が切り捨てられて i に格納される。iは9になる。
明示的型変換の例
型変換の規則:
小さなデータ型から大きなデータ型への変換は通常、データの損失なしに行われる(例: int から double への変換)。
大きなデータ型から小さなデータ型への変換(例: double から int への変換)は、データの切り捨てや精度の損失を引き起こす可能性がある。
符号付き型と符号なし型の間での変換には注意が必要だ。負の符号付き整数を符号なし型に変換すると、予期せぬ大きな正の値になる可能性がある。
型変換を適切に使用することで、異なるデータ型を持つ変数間での演算の正確性を保ち、プログラムの意図した動作を保証できる。
ただし、不適切な型変換はバグやデータの損失につながるため、慎重に使用する必要がある。
5.まとめ
今回は、C言語の変数とデータ型に焦点を当てた。 変数はデータを格納するためのメモリ領域を指し、宣言時に型を指定する必要がある。 主要なデータ型には整数型、浮動小数点数型、文字型、文字列があり、それぞれ異なる種類のデータを扱う。 整数型は int, short, long などがあり、浮動小数点数には float と double がある。 文字は char で表され、文字列は char の配列として扱われる。 定数は値が変更されないデータで、リテラル定数とシンボリック定数があり、これらの基礎を理解することは、 効率的なC言語プログラミングのために不可欠だ。ぜひ、早い段階でマスターしよう。
▼参考図書、サイト
「かんたん C言語」 大川内 隆朗 技術評論社
「12歳からはじめる ゼロからのC言語ゲームプログラミング教室」 リブロワークス