【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.000000

3.型変換のポイント

3.1. 暗黙の型変換と警告

  • intにdoubleを代入すると、小数点以下は切り捨てられます。
  • キャスト(明示的型変換)を書かない場合でも、暗黙的に変換されますが、警告が出る場合があります。

例:
intVal1 = dblVal1;
変換時に「データが失われる可能性があります」という警告が出ることがあります。

3.2. 明示的キャストの効果

キャストを使うことで、「意図して型を変換している」ことを明示できます。
プログラムの可読性・安全性が高まります。

3.3. 他の型変換例

変換元変換先キャスト例結果
doubleint(int)3.993
intdouble(double)1010.000000
charint(int)'A'65(ASCII値)
intchar(char)65'A'

まとめ

  • キャストは異なる型への変換を明示的に行う方法
  • キャストなしでも型変換される場合があるが、意図を明確にするためにはキャストを使う
  • 実数→整数の変換では小数点以下が切り捨て
  • 型変換は「データの損失」や「警告」に注意しよう。

実際にプログラムを書いて型変換の動作や警告を体験し、キャストの使いどころを理解しましょう。