キャスト演算子

通常演算は同じデータ型を持つ変数や値の間で行われますが、 int 型の値を double 型の変数に格納したり、逆に double 型の値を int 型の変数に格納したりする場合があります。このような場合に型を変換するために使われるものがキャスト演算子です。ここでは C 言語におけるキャスト演算子の使い方について解説します。

(Last modified: )

キャスト演算子の使い方

C 言語では型の変換は自動的に行われます。例えば int 型の値を double 型の変数に格納したり、 double 型の値を int 型の変数に格納することができます。次の例を見て下さい。

#include <stdio.h>

int main(void){
  int a;
  double b;

  a = 100;
  b = a;

  printf("b = %f\n", b);

  b = 12.345;
  a = b;

  printf("a = %d\n", a);

  return 0;
}

コンパイルの時点でもプログラムを実行した時点でも特にエラーは表示されません。

キャスト演算子(1)

キャスト演算子(2)

今度は Visual Studio の環境で、コンパイラの警告をすべて表示するように /Wall オプションを設定してコンパイルを行ってみます。

cl /Wall sample.c

キャスト演算子(3)

すると「warning C4244: '=': 'double' から 'int' への変換です。データが失われる可能性があります。」という警告が表示されました。これはより大きな数値を扱うことが出来る double 型から int 型へ値を変換しているので、場合によっては値の一部が無くなる可能性があることを警告しています。

普通にコンパイルしただけでは警告が出ないように型の変換を行うことは問題があるわけではありません。特別な記述をしなくても型の変換は自動的に行われます。ただ、プログラムの中で型を変換することを明示的に記述することができます。その際に使われるのがキャスト演算子です。

キャスト演算子の書式は次の通りです。

(型)式

式のデータ型を () の中で指定した型に変換します。具体的には次のように記述します。

double a = 10.5;

int b = (int)a;

上記の例では変数 a の値を int 型に変換したものを左辺の変数 b に格納します。この時変数 a のデータ型や格納されている値に変更はありません。変数 a に格納される値を取り出し、 int 型に変換してから変数 b に格納するというだけです。

サンプルコード

それでは簡単なサンプルを作成します。

#include <stdio.h>

int main(void){
  int a;
  double b;

  a = 100;
  b = (double)a;

  printf("a = %d\n", a);
  printf("b = %f\n", b);

  printf("----\n");

  b = 12.345;
  a = (int)b;

  printf("b = %f\n", b);
  printf("a = %d\n", a);

  return 0;
}

テキストエディタでプログラムを記述したあと sample.c という名前で保存します。(文字コードは UTF-8(BOM付き) です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで最初にコンパイルを行います。

cl /Wall sample.c

キャスト演算子(4)

今回は /Wall オプションを付けてコンパイルを行っても警告が表示されませんでした。コンパイルが終わりましたら、次のように実行してください。

sample

キャスト演算子(5)

double 型から int 型への型変換を行っていますが、キャスト演算子を使って明示的に型変換を行っていますのでコンパイルの時点で警告も表示されず、プログラムの実行も問題なく行われました。

-- --

C 言語におけるキャスト演算子の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。