
【6日でできるC言語入門】キャストとデータの型変換
C言語でプログラムを作成していると、異なるデータ型の間で値をやりとりする場面がよくあります。整数型(int)と実数型(double)、または文字型(char)と整数型など、型の違いを正しく扱うことは、プログラムの安定性やバグ防止にとても重要です。ここでは「キャスト」と呼ばれる型変換の基本、明示的・暗黙的な変換、キャストの使いどころなどを解説し、サンプルプログラムとともに詳しく説明します。

1.データ型と型変換の基礎
1.1. データ型とは
C言語には「int」「double」「char」などのデータ型があり、変数にどんな値を格納できるか決まっています。
| データ型 | 内容 | 例 |
|---|---|---|
| int | 整数値 | 10, -5, 0 |
| double | 実数値(小数あり) | 1.23, -4.5, 0.0 |
| char | 文字コード | 'A', 'あ', '1' |
1.2. 型変換とは
異なる型の変数に値を代入したり計算したりするとき、型変換が発生します。
このとき、自動的に変換される場合(暗黙の型変換)と、プログラマが明示的に変換を指定する場合(明示的な型変換・キャスト)があります。
2.キャスト(明示的な型変換)
2.1. キャストの基本構文
キャストは、(型名)値 の形で記述します。
int n = (int)3.14; // doubleをintへ変換。nは3になる
double d = (double)5; // intをdoubleへ変換。dは5.0になる2.2. サンプルプログラム
以下は、異なる型同士で値の代入やキャストを行う例です(内容・メッセージを変更しています)。
プロジェクト/ファイル名: Lesson18_1/main.c
#include <stdio.h>
int main(void) {
int intVal1, intVal2;
double dblVal1, dblVal2;
// 値の代入
dblVal1 = 4.56;
dblVal2 = 7.89;
intVal1 = dblVal1; // 暗黙の型変換(キャストなし)
intVal2 = (int)dblVal2; // 明示的キャスト
printf("dblVal1 = %f, dblVal2 = %f\n", dblVal1, dblVal2);
printf("intVal1 = %d, intVal2 = %d\n", intVal1, intVal2);
// 逆方向の変換
double d_from_int = (double)intVal2;
printf("intVal2から変換したdouble値: %f\n", d_from_int);
return 0;
}実行結果
dblVal1 = 4.560000, dblVal2 = 7.890000
intVal1 = 4, intVal2 = 7
intVal2から変換したdouble値: 7.0000003.型変換のポイント
3.1. 暗黙の型変換と警告
- intにdoubleを代入すると、小数点以下は切り捨てられます。
- キャスト(明示的型変換)を書かない場合でも、暗黙的に変換されますが、警告が出る場合があります。
例:
intVal1 = dblVal1;
変換時に「データが失われる可能性があります」という警告が出ることがあります。
3.2. 明示的キャストの効果
キャストを使うことで、「意図して型を変換している」ことを明示できます。
プログラムの可読性・安全性が高まります。
3.3. 他の型変換例
| 変換元 | 変換先 | キャスト例 | 結果 |
|---|---|---|---|
| double | int | (int)3.99 | 3 |
| int | double | (double)10 | 10.000000 |
| char | int | (int)'A' | 65(ASCII値) |
| int | char | (char)65 | 'A' |
まとめ
- キャストは異なる型への変換を明示的に行う方法
- キャストなしでも型変換される場合があるが、意図を明確にするためにはキャストを使う。
- 実数→整数の変換では小数点以下が切り捨て
- 型変換は「データの損失」や「警告」に注意しよう。
実際にプログラムを書いて型変換の動作や警告を体験し、キャストの使いどころを理解しましょう。
